MyBatis是一款支持普通SQL查询、存储过程和高级映射的持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
无论是用过的 hibernate,Mybatis,你都可以发现他们有一个共同点:
1.从配置文件(通常是 XML 配置文件中)获取数据库连接信息,通过配置信息构建SqlSessionFactory
2.由SqlSessionFactor 产生 sqlSession,打开数据库会话。
3.在 session 中完成对数据的增删改查和事务提交等.
4.在用完之后关闭 session 。
5.在Java对象和数据库之间有做 mapping 的配置文件,也通常是 xml 文件。
在上面,我们提到了通过SqlSessionFactory产生sqlSession,这里介绍一下SqlSession的作用
1、向sql语句传入参数
2、执行sql语句
3、获取执行sql语句的结果
4、对事物的控制
先建一张简单的user表:
create table `user` (
`id` int(10) not null auto_increment,
`userName` varchar(50) default null,
`userAge` int(11) default null,
`userAddress` varchar(200) default null,
primary key (`id`)
) ENGINE=InnoDB auto_increment=2 default charset=utf8;
insert into `user` values('1', 'zhangsan', '20', 'shandong');
一个名为user的表格,里面存放了user相关字段,然后我们需要有一个Java实体类与之对应。
public class User {
private int id;
private String userName;
private String userAge;
private String userAddress;
public User() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
}
<configuration>
<typeAliases>
<typeAlias alias="User" type="cn.edu.ldu.model.User"/>
typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
<property name="username" value="root"/>
<property name="password" value="123456"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="cn/edu/ldu/model/User.xml"/>
mappers>
configuration>
这是最简单的config.xml的写法,关于config.xml的具体介绍,将在下面一篇文章里进行介绍。
<mapper namespace="cn.edu.ldu.models.UserMapper">
<select id="selectUserByID" parameterType="int" resultType="User">
select * from `user` where id = #{id}
select>
mapper>
首先,建立一个IUserOperation接口类:
public interface IUserOperation {
public User selectUserByID(int id);
}
Test测试类:
public class Test {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSessionFactory getSessionFactory() {
return sqlSessionFactory;
}
/**
* 通过id查询
* @param id
*/
public void selectUserByID(int id) {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation iUserOperation = session.getMapper(IUserOperation.class);
User user = iUserOperation.selectUserByID(id);
System.out.println("result:"+user.getId()+","+user.getUserName());
} finally {
session.close();
}
}
public static void main(String[] args) {
Test testUser=new Test();
testUser.selectUserByID(2);
}
}