一、MyBatis介绍
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
二、快速入门
2.1 准备
首先需要添加两个jar包,一个是mybatis-3.1.1.jar,一个是mysql-connector-java-5.1.7-bin.jar。然后在MySQL中建立数据库和数据表:
?
create database mybatis;
use mybatis;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
INSERT INTO users(NAME, age) VALUES('Tom', 12);
INSERT INTO users(NAME, age) VALUES('Jack', 11);
2.2 添加Mybatis的配置文件conf.xml
?
?
2.3 定义表所对应的实体类
?
?
public class User {
private int id;
private String name;
private int age;
//get,set方法
}
2.4 定义操作users表的SQL映射文件userMapper.xml
?
?
2.5 在conf.xml文件中注册userMapper.xml文件
?
?
2.6 编写测试代码
?
?
String resource = "conf.xml"; //加载mybatis的配置文件(它也加载关联的映射文件) Reader reader = Resources.getResourceAsReader(resource); //构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); //映射sql的标识字符串 String statement = "com.atguigu.mybatis.bean.userMapper"+".selectUser"; //执行查询返回一个唯一user对象的sql User user = session.selectOne(statement, 1); System.out.println(user);
三、数据表的CRUD操作
?
3.1 XML的实现
?
insert into users(name, age) values(#{name}, #{age}); delete from users where id=#{id} update users set name=#{name},age=#{age} where id=#{id}
3.2 注解的实现
?
?
public interface UserMapper {
@Insert("insert into users(name, age) values(#{name}, #{age})")
public int insertUser(User user);
@Delete("delete from users where id=#{id}")
public int deleteUserById(int id);
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public int updateUser(User user);
@Select("select * from users where id=#{id}")
public User getUserById(int id);
@Select("select * from users")
public List getAllUser();
}
在conf.xml中注册这个映射接口:
?
?
在DAO类中调用:
?
?
public User getUserById(int id) {
SqlSession session = sessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(id);
return user;
}
四、几个可以优化的地方
?
4.1 建立数据库配置文件
?
## db.properties
然后在Mybatis的配置文件conf.xml中加入读取db.properties的配置:
?
?
4.2 为实体类定义别名
?
?
上面的配置可以简化SQL映射xml文件中的引用,不再需要每次都要写类的全路径。
?
4.3 添加log4j配置文件,打印日志信息
?
#log4j.properties log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
?