步骤

  1. 创建mybatis工程
  2. pom文件相关依赖
  3. 新增配置文件 logback.xml,sqlMapConfig.xml,jdbc.properties
  4. 创建com.itheima.entity包,新增User实体类
  5. 创建com.itheima.dao包,新增UserMapper接口、UserMapper.xml映射文件
  6. 创建com.itheima.test包,新增TestUserDao测试类

代码组织:

对应步骤5
UserMapper.java

package com.itheima.dao;

import com.itheima.entity.User;

import java.util.List;

public interface UserMapper {

  1. List<User> findAllUsers();
  2. int addUser(User user);
  3. // update user set username=?,birthday=?,sex=?,address=? where id = ?<br /> int updateUser(User user);
  4. //delete from user where id = ?<br /> int deleteUser(int id);<br />}

UserMapper.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">


<!—
查询语句 : select标签
id: 接口中方法的名字
resultType:返回的实体类的类型,类全名

  1. ORM: 对象关系映射<br /> 数据表中的一条记录 映射到 java的一个实体类对象中<br /> --><br /> <select id="findAllUsers" resultType="user"><br /> select * from user<br /> </select>
  2. <!--<br /> insert into user values(null,?,?,?,?)
  3. mybatis的占位符不再直接使用?
  4. #{username}表达式: 含义是参数user的username属性会赋值到这里
  5. --><br /> <insert id="addUser"><br /> insert into user values(null,#{username},#{birthday},#{sex},#{address})<br /> </insert>
  6. <update id="updateUser"><br /> update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}<br /> where id = #{id}<br /> </update>
  7. <delete id="deleteUser"><br /> delete from user where id = #{id}<br /> </delete><br /></mapper>

测试类
package com.itheima.test;

import com.itheima.dao.UserMapper;
import com.itheima.entity.User;
import com.itheima.utils.MyBatisUtil;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestDemo {

  1. @Test<br /> public void select() throws IOException {<br /> //1. 加载配置文件,得到输入流对象<br /> InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");<br /> //2. 创建会话工厂建造类<br /> SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();<br /> //3. 通过建造类得到会话工厂类 (工厂设计模式)
  2. SqlSessionFactory factory = builder.build(inputStream);<br /> //4. 通过会话工厂得到会话对象
  3. SqlSession session = factory.openSession();<br /> //5. 会话对象得到UserMapper接口的代理对象<br /> UserMapper userMapper = session.getMapper(UserMapper.class);<br /> // 生成了代理对象:org.apache.ibatis.binding.MapperProxy@198b6731
  4. System.out.println(userMapper);<br /> //6. 执行查询操作<br /> List<User> users = userMapper.findAllUsers();<br /> for (User user : users) {<br /> System.out.println(user);<br /> }<br /> //7. 关闭会话<br /> session.close();<br /> }
  5. @Test<br /> public void insert() throws IOException {<br /> //1. 加载核心配置文件<br /> InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");<br /> //2. 创建工厂建造类<br /> SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();<br /> //3. 创建工厂: 封装连接池<br /> SqlSessionFactory factory = builder.build(is);<br /> /*<br /> 4. 获取连接会话<br /> 1). 禁止事务自动提交<br /> SqlSession session = factory.openSession();
  6. 成功要commit<br /> 失败要rollback<br /> 2). 事务自动提交<br /> SqlSession session = factory.openSession(true);<br /> */<br /> SqlSession session = factory.openSession();
  7. /*<br /> 5. 创建接口的实现类对象(动态代理)<br /> 1). 底层定义一个类实现接口UserMapper,重写所有抽象方法<br /> 2). 底层如何编写方法体?<br /> a. 接口的映射文件指导底层编写方法体<br /> b. 接口的标签名声明了当前的操作类型<br /> select 是查询 -> executeQuery<br /> insert 是插入 -> executeUpdate<br /> */<br /> UserMapper mapper = session.getMapper(com.itheima.dao.UserMapper.class);
  8. User user = new User(null, "排骨精", "2021-4-28", "男", "广州天河");<br /> int count = mapper.addUser(user);
  9. System.out.println("受影响的行数:" + count);
  10. //6. 事务成功要提交,失败要回滚<br /> session.commit();<br /> // 7. 关闭连接 (将连接还给连接池)<br /> session.close();<br /> }
  11. @Test<br /> public void update() throws IOException {<br /> //1. 加载核心配置文件<br /> InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");<br /> //2. 创建工厂建造类<br /> SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();<br /> //3. 创建工厂: 封装连接池<br /> SqlSessionFactory factory = builder.build(is);<br /> /*<br /> 4. 获取连接会话<br /> */<br /> SqlSession session = factory.openSession();
  12. /*<br /> 5. 创建接口的实现类对象(动态代理)<br /> */<br /> UserMapper mapper = session.getMapper(UserMapper.class);
  13. //TODO: 修改<br /> User user = new User(6, "味精", "2021-4-28", "男", "广州天河");<br /> int count = mapper.updateUser(user);
  14. System.out.println("受影响的行数:" + count);
  15. //6. 事务成功要提交,失败要回滚<br /> session.commit();<br /> // 7. 关闭连接 (将连接还给连接池)<br /> session.close();<br /> }
  16. @Test<br /> public void delete() throws IOException {<br /> //1. 加载核心配置文件<br /> InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");<br /> //2. 创建工厂建造类<br /> SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();<br /> //3. 创建工厂: 封装连接池<br /> SqlSessionFactory factory = builder.build(is);<br /> /*<br /> 4. 获取连接会话<br /> */<br /> SqlSession session = factory.openSession();
  17. /*<br /> 5. 创建接口的实现类对象(动态代理)<br /> */<br /> UserMapper mapper = session.getMapper(UserMapper.class);
  18. //TODO: 删除<br /> int count = mapper.deleteUser(7);
  19. System.out.println("受影响的行数:" + count);
  20. //6. 事务成功要提交,失败要回滚<br /> session.commit();<br /> // 7. 关闭连接 (将连接还给连接池)<br /> session.close();<br /> }
  21. @Test<br /> public void delete2() throws IOException {<br /> SqlSession session = MyBatisUtil.openSession();<br /> UserMapper mapper = session.getMapper(UserMapper.class);<br /> mapper.deleteUser(6);<br /> MyBatisUtil.commitAndClose(session);
  22. }<br />}<br />工具类:<br />package com.itheima.utils;

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 java.io.IOException;
import java.io.InputStream;

public class MyBatisUtil {

  1. private static SqlSessionFactory factory;<br /> static{<br /> try {<br /> //1. 加载核心配置文件<br /> InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");<br /> //2. 创建工厂建造类<br /> SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();<br /> //3. 创建工厂: 封装连接池<br /> factory = builder.build(is);<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> }
  2. public static SqlSession openSession(){<br /> /*<br /> 4. 获取连接会话<br /> */<br /> SqlSession session = factory.openSession();<br /> return session;<br /> }
  3. //成功提交<br /> public static void commitAndClose(SqlSession session){<br /> if(session != null){<br /> session.commit();<br /> session.close();<br /> }<br /> }<br /> //失败回滚<br /> public static void rollbackAndClose(SqlSession session){<br /> if(session != null){<br /> session.commit();<br /> session.close();<br /> }<br /> }<br />}

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png