Mybatis基本环境搭建及CRUD基本方法使用
程序员文章站
2022-06-28 17:20:10
Mybatis基本环境搭建一、创建maven工程并导入坐标二、创建实体类和dao的接口一、创建maven工程并导入坐标 org.mybatis mybatis 3.4.5<...
Mybatis基本环境搭建及CRUD基本方法
一、创建maven工程并导入坐标
<dependencies> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> <!----单元测试> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <!--maven插件--> <plugins> <!--jdk编译插件--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build>
二、创建实体类
import java.io.Serializable; import java.util.Date; /**
* 实现序列化接口
*/ public class User implements Serializable { private Integer id; private String username; private String address; private String sex; private Date birthday; public Integer getId() {return id;} public void setId(Integer id) {this.id = id;} public String getUsername() {return username;} public void setUsername(String username) {this.username = username;} public String getAddress() {return address;} public void setAddress(String address) {this.address = address;} public String getSex() {return sex;} public void setSex(String sex) {this.sex = sex;} public Date getBirthday() {return birthday;} public void setBirthday(Date birthday) {this.birthday = birthday;} @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", address='" + address + '\'' + ", sex='" + sex + '\'' + ", birthday=" + birthday + '}'; } }
三、编写dao的接口
具体方法:
- 查询所有用户信息方法
- 保存一个用户方法
- 保存一个用户,并获取用户id方法
- 根据用户id更新方法
- 根据用户id删除方法
- 查询一个用户方法
- 根据名称模糊查询用户信息方法
- 查询总用户数方法
package com.hzxy.dao; import com.hzxy.domain.User; import java.util.List; /**
* 用户的持久层接口
*/ public interface UserDao { /**
* 查询所有用户
* @return
*/ List<User> findAll(); /**
* 保存用户
* @param user
*/ void saveUser1(User user); /**
* 保存用户,并获取用户id
* @param user
*/ void saveUser2(User user); /**
* 根据id更新用户
* @param user
*/ void updateUser(User user); /**
* 根据id删除用户
* @param userid
*/ void deleteUser(Integer userid); /**
* 根据id查询用户信息
* @param userId
* @return
*/ User findById(Integer userId); /**
* 根据名称模糊查询用户信息
* @param username
* @return
*/ List<User> findByName(String username); /**
* 查询总用户数
* @return
*/ int findTotal(); }
四、创建Mybatis的主配置文件
<?xml version="1.0" encoding="UTF-8"?> <!--头部约束--> <!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置环境 --> <environments default="mysql"> <!--默认环境--> <!-- 配置mysql的环境--> <environment id="mysql"> <!-- 配置事务的类型 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置连接池(数据源) --> <dataSource type="POOLED"> <!-- 配置连接数据库的4个基本信息 --> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybastis?serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --> <mappers> <mapper resource="com/hzxy/dao/UserDao.xml"/> </mappers> </configuration>
五、创建用户的映射配置文件
<?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.hzxy.dao.UserDao"> <!-- 注明哪个dao接口--> <!-- 查询所有 --> <select id="findAll" resultType="com.hzxy.domain.User"> <!--方法名称和封装好存放的位置--> SELECT * FROM USER ; </select> <!-- 保存用户 --> <insert id="saveUser1" parameterType="com.hzxy.domain.User"> <!-- 告知参数类型 --> <!-- 用户id是自增长的,所以不用填写参数 --> INSERT INTO USER (username,birthday,sex,address)VALUES(#{username},#{birthday},#{sex},#{address}); </insert> <!-- 保存用户 --> <insert id="saveUser2" parameterType="com.hzxy.domain.User"> <!-- 告知参数类型 --> <!-- 配置插入操作后,获取插入数据的id; keyColumn库的值--> <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER"> SELECT last_insert_id(); </selectKey> INSERT INTO USER (username,birthday,sex,address)VALUES(#{username},#{birthday},#{sex},#{address}); </insert> <!-- 更新用户 --> <update id="updateUser" parameterType="com.hzxy.domain.User"> <!-- 告知参数类型 --> UPDATE USER SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}; </update> <!-- 删除用户 --> <delete id="deleteUser" parameterType="java.lang.Integer"> <!-- 告知参数类型 --> DELETE FROM USER WHERE id = #{uid}; <!-- uid只是一个占位符,可以随便写--> </delete> <!-- 根据id查询用户信息 --> <select id="findById" parameterType="Int" resultType="com.hzxy.domain.User"> SELECT * FROM USER WHERE id = #{uid}; </select> <!-- 根据名称模糊查询用户信息 --> <select id="findByName" parameterType="string" resultType="com.hzxy.domain.User"> SELECT * FROM USER WHERE username LIKE #{name}; </select> <!-- 查询总用户数 --> <select id="findTotal" resultType="int"> SELECT COUNT(id) FROM USER ; </select> </mapper>
六、测试方法
方法调用步骤
- 使用类加载器读取类路径的配置文件,生成字节输入流
- 创建SqlSessionFactory工厂,mybatis使用构建者模式
- 使用工厂生产SqlSession对象
- 使用SqlSession创建Dao接口的代理对象
- 执行测试方法
- 提交事务
- 释放资源
package com.hzxy.text; import com.hzxy.dao.UserDao; import com.hzxy.domain.User; 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.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; /**
* 测试mybatis的crud操作
*/ public class MybatisTest { private InputStream in ; private SqlSession sqlSession ; private UserDao userDao ; @Before //用于在测试方法执行前执行 public void init() throws IOException { //使用类加载器读取类路径的配置文件,生成字节输入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //创建SqlSessionFactory工厂,mybatis使用构建者模式 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //使用工厂生产SqlSession对象 sqlSession = factory.openSession(); //使用SqlSession创建Dao接口的代理对象 userDao = sqlSession.getMapper(UserDao.class); } @After //用于在测试方法执行之后执行 public void destroy() throws IOException { //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); in.close(); } /**
* 测试查询所有
*/ @Test public void testFindAll(){ //使用代理对象执行查询所有方法 List<User> users = userDao.findAll(); for (User user : users){ System.out.println(user); } } /**
* 测试保存1操作
*/ @Test public void testSave(){ User user = new User(); user.setUsername("mybatis"); user.setAddress("广东"); user.setSex("男"); user.setBirthday(new Date()); //使用代理对象执行保存方法 userDao.saveUser1(user); } /**
* 测试保存2操作
*/ @Test public void testSave2(){ User user = new User(); user.setUsername("mybatis"); user.setAddress("广东"); user.setSex("男"); user.setBirthday(new Date()); //使用代理对象执行保存方法 userDao.saveUser2(user); System.out.println(user); } /**
* 测试更新操作
*/ @Test public void testUpdate(){ //使用刚添加的用户 User user = new User(); user.setId(49); user.setUsername("mybatis"); user.setAddress("北京"); user.setSex("女"); user.setBirthday(new Date()); //使用代理对象执行更新方法 userDao.updateUser(user); } /**
* 测试删除操作
*/ @Test public void testDelete(){ //使用代理对象执行删除方法 userDao.deleteUser(49); } /**
* 测试查询一个操作
*/ @Test public void testFindOne(){ //使用代理对象执行删除方法 User user = userDao.findById(50); System.out.println(user); } /**
* 测试模糊查询操作
*/ @Test public void testFindByName(){ //使用代理对象执行删除方法 List<User> users = userDao.findByName("%王%"); for(User user : users){ System.out.println(user); } } /**
* 测试查询总用户数操作
*/ @Test public void testFindTotal(){ //使用代理对象执行删除方法 int count = userDao.findTotal(); System.out.println(count); } }
七、注意事项
1.Mybatis映射配置文件
1.1 mybatis的主映射配置文件位置必须和dao接口的包结构相同
2.用户的映射配置文件
2.1 用户的映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
2.2 用户的映射配置文件的操作配置,id属性的取值必须是dao接口的方法名
2.3 用户的映射配置文件的操作配置,resultType 属性: 用于指定结果集的类型
2.4 用户的映射配置文件的操作配置,parameterType 属性: 用于指定传入参数的类型
2.5 用户的映射配置文件的操作,sql 语句中使用#{}字符:它代表占位符,相当于原来 jdbc 部分所学的"?"
2.6 用户的映射配置文件的操作,#{}中内容的写法: 由于数据类型是基本类型,所以此处可以随意写
3.测试方法中读取配置文件
3.1 测试方法中读取配置文件,使用类加载器读取类路径的配置文件,生成字节输入流,不使用绝对路径和相对路径
八、附录
本文地址:https://blog.csdn.net/sygg12345666/article/details/107864982