ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 使用 MyBatis 对表执行 CRUD 操作 ## 一、使用 MyBatis 对表执行 CRUD 操作——基于 XML 的实现 ### 1、定义 sql 映射的接口 UserMapper 接口的代码如下: ~~~ package com.ntqingniao.mybatis.mapping; import java.util.List; import com.ntqingniao.mybatis.entity.User; public interface UserMapper { /** * 增加 * * @param user * @return int */ public int add(User user); /** * 删除 * * @param id * @return int */ public int deleteById(int id); /** * 更新 * * @param user * @return int */ public int update(User user); /** * 根据id查询用户 * * @param id * @return User */ public User getById(int id); /** * 查询所有用户 * * @return List<User> */ public List<User> getAll(); } ~~~ 需要说明的是,我们不需要针对 UserMapper 接口去编写具体的实现类代码,这个具体的实现类由 MyBatis 帮我们动态构建出来,我们只需要直接拿来使用即可。 ### 2、定义 sql 映射 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"> <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 例如namespace="com.ntqingniao.mybatis.mapping.UserMapper"就是com.ntqingniao.mybatis.mapping(包名)+UserMapper(UserMapper.java文件去除后缀) --> <mapper namespace="com.ntqingniao.mybatis.mapping.UserMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复.使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="com.ntqingniao.mybatis.entity.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 --> <!-- 根据id查询得到一个user对象 --> <select id="getById" parameterType="int" resultType="com.ntqingniao.mybatis.entity.User"> select * from users where id=#{id} </select> <!-- 创建用户(Create) --> <insert id="add" parameterType="com.ntqingniao.mybatis.entity.User"> insert into users(name,age) values(#{name},#{age}) </insert> <!-- 删除用户(Remove) --> <delete id="deleteById" parameterType="int"> delete from users where id=#{id} </delete> <!-- 修改用户(Update) --> <update id="update" parameterType="com.ntqingniao.mybatis.entity.User"> update users set name=#{name},age=#{age} where id=#{id} </update> <!-- 查询全部用户 --> <select id="getAll" resultType="com.ntqingniao.mybatis.entity.User"> select * from users </select> </mapper> ~~~ ### 3.测试类代码如下: ~~~ package com.ntqingniao.mybatis.test; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.util.ArrayList; import java.util.List; 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 com.ntqingniao.mybatis.entity.User; import com.ntqingniao.mybatis.mapping.UserMapper; public class Test { public static void main(String[] args) throws IOException { // mybatis的配置文件 String resource = "conf.xml"; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) InputStream is = Test.class.getClassLoader().getResourceAsStream( resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(is); // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) // Reader reader = Resources.getResourceAsReader(resource); // 构建sqlSession的工厂 // SqlSessionFactory sessionFactory = new // SqlSessionFactoryBuilder().build(reader); // 创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); // 通过getMapper()方法获取UserMapper接口 UserMapper userMapper = session.getMapper(UserMapper.class); User user = new User(); /** 新增用户信息 **/ user.setName("test001"); user.setAge(22); userMapper.add(user); /** 根据id,查询用户信息 **/ // 执行查询操作,将查询结果自动封装成User返回 user = userMapper.getById(2); System.out.println(user.getName()); /** 根据id,更新用户信息 **/ user.setId(2); user.setName("李四"); user.setAge(26); userMapper.update(user); /** 根据id,删除用户信息 **/ userMapper.deleteById(8); /** 查询所有的用户 **/ List<User> userList = new ArrayList<User>(); // 执行查询操作,将查询结果自动封装成List<User>返回 userList = userMapper.getAll(); for (User user2 : userList) { System.out.println(user2); } // 增删改操作时,要执行commit操作 session.commit(); // 使用SqlSession执行完SQL之后需要关闭SqlSession session.close(); } } ~~~ ## 二、使用 MyBatis 对表执行 CRUD 操作——基于注解的实现 ### 1、定义 sql 映射的接口 UserMapper2 接口的代码如下: ~~~ package com.ntqingniao.mybatis.mapping; import java.util.List; import org.apache.ibatis.annotations.*; import com.ntqingniao.mybatis.entity.User; public interface UserMapper2 { /** * 增加 * * @param user * @return int */ @Insert("insert into users(name, age) values(#{name}, #{age})") public int add(User user); /** * 删除 * * @param id * @return int */ @Delete("delete from users where id=#{id}") public int deleteById(int id); /** * 更新 * * @param user * @return int */ @Update("update users set name=#{name},age=#{age} where id=#{id}") public int update(User user); /** * 根据id查询用户 * * @param id * @return User */ @Select("select * from users where id=#{id}") public User getById(int id); /** * 查询所有用户 * * @return List<User> */ @Select("select * from users") public List<User> getAll(); } ~~~ 需要说明的是,我们不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。 ### 2、在 conf.xml 文件中注册这个映射接口 ~~~ <?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="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_test?useUnicode=true&amp;characterEncoding=UTF-8" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> </environments> <mappers> <!-- 注册UserMapper映射接口 --> <mapper class="com.ntqingniao.mybatis.mapping.UserMapper2" /> </mappers> </configuration> ~~~ ### 3、测试类的代码如下: ~~~ package com.ntqingniao.mybatis.test; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.ntqingniao.mybatis.entity.User; import com.ntqingniao.mybatis.mapping.UserMapper2; public class Test { public static void main(String[] args) throws IOException { // mybatis的配置文件 String resource = "conf.xml"; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) InputStream is = Test.class.getClassLoader().getResourceAsStream( resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(is); // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) // Reader reader = Resources.getResourceAsReader(resource); // 构建sqlSession的工厂 // SqlSessionFactory sessionFactory = new // SqlSessionFactoryBuilder().build(reader); // 创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); // 通过getMapper()方法获取UserMapper接口 UserMapper2 userMapper = session.getMapper(UserMapper2.class); User user = new User(); /** 新增用户信息 **/ user.setName("test001"); user.setAge(22); userMapper.add(user); /** 根据id,查询用户信息 **/ user = userMapper.getById(2); System.out.println(user.getName()); /** 根据id,更新用户信息 **/ user.setId(2); user.setName("李四"); user.setAge(26); userMapper.update(user); /** 根据id,删除用户信息 **/ userMapper.deleteById(8); /** 查询所有的用户 **/ List<User> userList = new ArrayList<User>(); userList = userMapper.getAll(); for (User user2 : userList) { System.out.println(user2); } // 增删改操作时,要执行commit操作 session.commit(); // 使用SqlSession执行完SQL之后需要关闭SqlSession session.close(); } } ~~~