步骤
- 创建mybatis工程
- pom文件相关依赖
- 新增配置文件 logback.xml,sqlMapConfig.xml,jdbc.properties
- 创建com.itheima.entity包,新增User实体类
- 创建com.itheima.dao包,新增UserMapper接口、UserMapper.xml映射文件
- 创建com.itheima.test包,新增TestUserDao测试类
代码组织:
对应步骤5
UserMapper.java
package com.itheima.dao;
import com.itheima.entity.User;
import java.util.List;
public interface UserMapper {
List<User> findAllUsers();
int addUser(User user);
// update user set username=?,birthday=?,sex=?,address=? where id = ?<br /> int updateUser(User user);
//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:返回的实体类的类型,类全名
ORM: 对象关系映射<br /> 数据表中的一条记录 映射到 java的一个实体类对象中<br /> --><br /> <select id="findAllUsers" resultType="user"><br /> select * from user<br /> </select>
<!--<br /> insert into user values(null,?,?,?,?)
mybatis的占位符不再直接使用?
#{username}表达式: 含义是参数user的username属性会赋值到这里
--><br /> <insert id="addUser"><br /> insert into user values(null,#{username},#{birthday},#{sex},#{address})<br /> </insert>
<update id="updateUser"><br /> update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}<br /> where id = #{id}<br /> </update>
<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 {
@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. 通过建造类得到会话工厂类 (工厂设计模式)
SqlSessionFactory factory = builder.build(inputStream);<br /> //4. 通过会话工厂得到会话对象
SqlSession session = factory.openSession();<br /> //5. 会话对象得到UserMapper接口的代理对象<br /> UserMapper userMapper = session.getMapper(UserMapper.class);<br /> // 生成了代理对象:org.apache.ibatis.binding.MapperProxy@198b6731
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 /> }
@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();
成功要commit<br /> 失败要rollback<br /> 2). 事务自动提交<br /> SqlSession session = factory.openSession(true);<br /> */<br /> SqlSession session = factory.openSession();
/*<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);
User user = new User(null, "排骨精", "2021-4-28", "男", "广州天河");<br /> int count = mapper.addUser(user);
System.out.println("受影响的行数:" + count);
//6. 事务成功要提交,失败要回滚<br /> session.commit();<br /> // 7. 关闭连接 (将连接还给连接池)<br /> session.close();<br /> }
@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();
/*<br /> 5. 创建接口的实现类对象(动态代理)<br /> */<br /> UserMapper mapper = session.getMapper(UserMapper.class);
//TODO: 修改<br /> User user = new User(6, "味精", "2021-4-28", "男", "广州天河");<br /> int count = mapper.updateUser(user);
System.out.println("受影响的行数:" + count);
//6. 事务成功要提交,失败要回滚<br /> session.commit();<br /> // 7. 关闭连接 (将连接还给连接池)<br /> session.close();<br /> }
@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();
/*<br /> 5. 创建接口的实现类对象(动态代理)<br /> */<br /> UserMapper mapper = session.getMapper(UserMapper.class);
//TODO: 删除<br /> int count = mapper.deleteUser(7);
System.out.println("受影响的行数:" + count);
//6. 事务成功要提交,失败要回滚<br /> session.commit();<br /> // 7. 关闭连接 (将连接还给连接池)<br /> session.close();<br /> }
@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);
}<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 {
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 /> }
public static SqlSession openSession(){<br /> /*<br /> 4. 获取连接会话<br /> */<br /> SqlSession session = factory.openSession();<br /> return session;<br /> }
//成功提交<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 />}