【梗概】
1.根据XML配置文件(全局配置文件,有数据源的一些运行信息)创建一个SqlSessionFactory对象。
2.sql映射文件:配置了每一个sql以及sql的封装规则。
3.将sql映射文件注册在全局配置文件中。
4写代码:
(1)根据全局配置文件得到SqlSessionFactory。
(2)使用SqlSession工厂,得到sqlSession对象,使用它进行增删改查。一个sqlSession就是代表和数据库的一次会话,用完关闭。
(3)使用sql的唯一标识来告诉Mybatis执行执行哪个sql。sql都保存在sql映射文件中。
【编写第一个基于Mybatis的程序】
(1)添加jar包
Mybatis:mybatis-3.1.1.jar
MySQL驱动包:mysql-connector-java-5.1.7-bin.jar
(2)建库+表
1 create database mybatis;2 use mybatis;3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);4 INSERT INTO users(NAME, age) VALUES('Tom', 12);5 INSERT INTO users(NAME, age) VALUES('Jack', 11);
(3) 添加 Mybatis 的配置文件 conf.xml
1 2 45 6 167 158 9 1410 11 12 13
(4) 定义表所对应的实体类
1 public class User {2 private int id;3 private String name;4 private int age;5 //get,set 方法6 }
(5)定义操作 users 表的 sql 映射文件 userMapper.xml
1 2 45 9
(6)在 在 conf.xml 文件中注册 userMapper.xml
12 3
(7)编写测试代码:执行定义的 select 语句
1 public class Test { 2 public static void main(String[] args) throws IOException { 3 String resource = "conf.xml"; 4 5 //加载 mybatis 的配置文件(它也加载关联的映射文件) 6 Reader reader = Resources.getResourceAsReader(resource); 7 8 //构建 sqlSession 的工厂 9 SqlSessionFactory sessionFactory = new 10 SqlSessionFactoryBuilder().build(reader);11 12 //创建能执行映射文件中 sql 的 sqlSession13 SqlSession session = sessionFactory.openSession();14 15 //映射 sql 的标识字符串16 String statement = "com.atguigu.mybatis.bean.userMapper"+".selectUser";17 18 //执行查询返回一个唯一 user 对象的 sql19 User user = session.selectOne(statement, 1);20 System.out.println(user); }21 }
【操作 users 表的 CRUD】
1). 定义 sql 映射 xml 文件
12 insert into users(name, age) values(#{name}, #{age}); 3 45 delete from users where id=#{id} 6 78 update users set name=#{name},age=#{age} where id=#{id} 9 10 13
2). 在 在 config.xml 中注册这个映射文件
1
3). 在 在 dao 中调用:
1 public User getUserById(int id) {2 SqlSession session = sessionFactory.openSession();3 User user = session.selectOne(URI+".selectUser", id);4 return user;5 }
【注解的实现】
1). 定义 sql 映射的接口
1 public interface UserMapper { 2 @Insert("insert into users(name, age) values(#{name}, #{age})") 3 public int insertUser(User user); 4 @Delete("delete from users where id=#{id}") 5 public int deleteUserById(int id); 6 @Update("update users set name=#{name},age=#{age} where id=#{id}") 7 public int updateUser(User user); 8 @Select("select * from users where id=#{id}") 9 public User getUserById(int id);10 @Select("select * from users")11 public ListgetAllUser();12 }
2). 在 在 config 中注册这个映射接口
1
3). 在 在 dao 类中调用
1 public User getUserById(int id) {2 SqlSession session = sessionFactory.openSession();3 UserMapper mapper = session.getMapper(UserMapper.class);4 User user = mapper.getUserById(id);5 return user;6 }
【几个可以优化的地方】
(1)连接数据库的配置单独放在一个 properties 文件中
## db.properties
(2)为实体类定义别名, 简化 sql 映射 xml 文件中的引用
12 3
(3)可以在 src 下加入 log4j 的配置文件, 打印日志信息
1. 添加 jar:
log4j-1.2.16.jar 2. log4j.properties(log4j.properties,
log4j.rootLogger=DEBUG, Console#Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%nlog4j.logger.java.sql.ResultSet=INFOlog4j.logger.org.apache=INFOlog4j.logger.java.sql.Connection=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG
3.log4j.xml( 方式二)
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern"value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /></layout></appender><logger name="java.sql"><level value="debug" /></logger><logger name="org.apache.ibatis"><level value="debug" /></logger><root><level value="debug" /><appender-ref ref="STDOUT" /></root></log4j:configuration>