一、理解什么是mybatis
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.
1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。(我主要学习java,就讲java的使用)
2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
3)mybatis与hibernate的对比?
mybatis提供一种“半自动化”的ORM实现。
这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。
而mybatis的着力点,则在于POJO与SQL之间的映射关系(还不是很理解这里)。
二、简单例子(快速入门)
1)建立java web项目
这里我建立的是java web项目。其实建立简单的java 项目也是可以的,不一定非要用web项目。项目建立起来后,
2)导入jar包
这里需要导入两个jar包:导入mybatis-3.3.0.jar 和 ojdbc.jar。注意:导入之后需要build path ,将导入的包变为奶瓶状,如上图所示。
3)建立数据库
因为平时使用的数据库多为Oracle,这里也采用了Oracle数据库。建立了一个表:tb_person(里面还有id,name ,password),采用mybatis管理数据库实现对 tb_person 表的操作。
4)使用到的类和文件
程序中使用到的类:User.java ,Test.java 。使用到的XML文件为 User.xml , configuration.xml 。
5)程序源代码
User.java
package mybatis;
public class User {
private int id;
private String name;
private String password;
public User(){}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + this.id + ", name=" + this.name + ", password=" + this.password + "]";
}
}
Test.java
package mybatis;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test {
public static void main(String[] args) throws IOException {
String resource = "configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = ssf.openSession();
try{
User user = session.selectOne("User.selectUser", 2);
System.out.println(user.getName());
System.out.println(user);
System.out.println("--------------分隔线---------------");
//怎么样保证取出来的只是想要查询的部分呢
List<User> users = session.selectList("User.selectUsers");
for(int i=0; i<users.size(); i++) {
System.out.println(users.get(i));
}
System.out.println("--------------分隔线---------------");
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
}
configuration.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="User" type="mybatis.User"></typeAlias>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="*****" />
<property name="password" value="*****" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/User.xml"/>
</mappers>
</configuration>
User.xml
这里写的是sql语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="User">
<select id="selectUser" parameterType="int" resultType="User">
SELECT * FROM tb_person WHERE id = #{id}
</select>
<select id="selectUsers" resultType="User">
SELECT * FROM tb_person
</select>
</mapper>
三、注意事项
1. mybatis 查询返回为NULL
注意一个问题:实体类的字段名称应该和数据库里面的字段名称保持一致,否则查询出的结果返回全部为null。
2. session.selectOne() 返回的是单条查询语句
3. session.selectList(“User.selectUsers”) 返回的是一个List ,可以实现返回一个集合
4.configuration.xml 文件应该放在src的根目录下,否则会出现错误
初次学习mybatis ,难免会有错误的地方,希望能够和各位路过的大神们多多交流!!!