Mybatis学习笔记

什么是MyBatis?
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。

总体流程

(1)加载配置并初始化

触发条件:加载配置文件

SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求

触发条件:调用Mybatis提供的API

传入参数:为SQLID和传入参数对象

处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求触发条件:API接口层传递请求过来

传入参数:为SQLID和传入参数对象

处理过程:

(A)根据SQLID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。

(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。

(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回。
我的第一个Mybatis Demo
1.创建数据库表(User表)
create table Users

(

userId int identity(1,1) primary key,--自动增长

userName varchar(30) NOT NULL ,

password varchar(80) NOT NULL ,

comment varchar(250) NULL DEFAULT NULL

)

select * from Users
2. 创建实体类
package xiangjie.mybatis.model;

/**

* @author 向洁

* 创建实体类User

*/

public class User {

private int userId;

private String userName;

private String password;

private String comment;

public int getUserId() {

return userId;

}

public void setUserId(int userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getComment() {

return comment;

}

public void setComment(String comment) {

this.comment = comment;

}

}

3. 定义数据访问接口
package xiangjie.mybatis.interfaces;

import java.util.List;

import xiangjie.mybatis.model.User;

/**
* @author 向洁
* 定义数据访问接口UserDao
*/
public interface UserDao {
public int insert(User user);
public int update(User user);
public int delete(String userName);
public List<User> selectAll();
public int countAll();
public User findByUserName(String userName);
}
4.创建MyBatis映射文件(UserDaoMapper.xml)
<?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="com.mybatis.config.UserDao">
<select id="countAll" resultType="int">
select count(*) c from user;
</select>
<select id="selectAll" resultType="com.mybatis.config.User">
select * from user order by userName asc
</select>
<insert id="insert" parameterType="com.mybatis.config.User">
insert into user(userName,password,comment) values(#{userName},#{password},#{comment})
</insert>
<update id="update" parameterType="com.mybatis.config.User">
update user set userName=#{userName},password=#{password},comment=#{comment} where userName=#{userName}
</update>
<delete id="delete" parameterType="int">
delete from user where userName=#{userName}
</delete>
<select id="findByUserName" parameterType="String" resultType="com.mybatis.config.User">
select * from user where userName=#{userName}
</select>
</mapper>

5. 创建mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.sql.jdbc.Driver" />
<property name="url" value="jdbc:sql://localhost:8080/hlp?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />
<property name="username" value="sa" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/config/UserDaoMapper.xml"/>
</mappers>
</configuration>

6. 编写测试代码
package org.xiangjie.test;

import java.io.Reader;
import java.util.Iterator;
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;

import xiangjie.mybatis.interfaces.UserDao;
import xiangjie.mybatis.model.User;

/**
* @author 向洁
* 测试代码类UserDaoTest
*/
public class UserDaoTest {
public void userDaoTest() throws Exception
{
String resource = "MyBatis-Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
User user = new User();
user.setUserName("hongye");
user.setPassword("123456");
user.setComment("备注");
userDao.insert(user);
System.out.println("记录条数:"+userDao.countAll());
List<User> users = userDao.selectAll();
Iterator<User> iter = users.iterator();
while(iter.hasNext()){
User u = iter.next();
System.out.println("用户名:"+u.getUserName()+"密码:"+u.getPassword());
}
user.setComment("comment");Mybatis学习笔记
userDao.update(user);
User u = userDao.findByUserName("hongye");
System.out.println(u.getComment());
userDao.delete("hongye");
System.out.println("记录条数:"+userDao.countAll());
session.commit();
session.close();
}

}