一、使用MyBatis对表实现CRUD操作
1.定义sql映射
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"> <!-- 为这个mapper指定一个唯一的namespace,namespace的值为包名+sql映射文件名,这样就能保证namespace值唯一 --> <mapper namespace="codeRose.mapping.userMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 --> <!-- 根据id查询得到一个user对象 --> <select id="getUser" parameterType="int" resultType="codeRose.dao.User"> select * from users where id=#{id} </select> <!-- 创建用户(Create) -->
<insert id="addUser" parameterType="codeRose.dao.User">
insert into users(name,age) values(#{name},#{age}) </insert> <!-- 删除用户(delete) --> <delete id="deleteUser" parameterType="int"> delete from users where id=#{id} </delete> <!-- 修改用户 --> <update id="updateUser" parameterType="codeRose.dao.User"> update users set name=#{name},age=#{age} where id=#{id} </update> <!-- 查询全部用户 --> <select id="getAllUsers" resultType="codeRose.dao.User"> select * from users </select> </mapper>
2.MyBatisUtil工具类代码如下:
package codeRose.util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { /** * 获取SqlSessionFactory * 返回SqlSessionFactory */ public static SqlSessionFactory getSqlSessionFactory(){ String resource ="conf.xml"; //类加载器 InputStream is=MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);//导入java.io.InputStream; SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(is); return factory; } /** * 获取SqlSession * 返回SqlSession */ public static SqlSession getSqlSession(){ return getSqlSessionFactory().openSession(); } /** * 获取SqlSession * 参数 isAutoCommit * true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务 * false表示创建的SqlSession对象在执行SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务 * 返回 SqlSession */ public static SqlSession getSqlSession(boolean isAutoCommit){ return getSqlSessionFactory().openSession(isAutoCommit); } }
3.基于XML实现对表CRUD的操作:
package codeRose.test; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import codeRose.dao.User; import codeRose.util.MyBatisUtil; public class TestCRUDByXmlMapper { @Test public void testAdd() { /** * 获取SqlSession * * @param isAutoCommit * true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务 * false * 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务 * @return SqlSession */ // SqlSession sqlSession =MyBatisUtil.getSqlSession(false); SqlSession sqlSession =MyBatisUtil.getSqlSession(true); /** * 映射sql的标识字符串, * codeRose.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值 * addUser是insert标签的id属性值,通过insert标签的id属性值就可以找到要执行的SQL * */ String statement="codeRose.mapping.userMapper.addUser";//映射sql的标识字符串 User user =new User(); user.setId(3); user.setName("codeRose"); user.setAge(24); int retResult =sqlSession.update(statement,user); //执行完SQL之后需要关闭SqlSession sqlSession.close(); System.out.println(retResult); } @Test public void testUpdate(){ SqlSession sqlSession = MyBatisUtil.getSqlSession(true); /** * 映射sql的标识字符串, * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, * updateUser是update标签的id属性值,通过update标签的id属性值就可以找到要执行的SQL */ String statement = "me.gacl.mapping.userMapper.updateUser";//映射sql的标识字符串 User user = new User(); user.setId(3); user.setName("孤傲苍狼"); user.setAge(25); //执行修改操作 int retResult = sqlSession.update(statement,user); //使用SqlSession执行完SQL之后需要关闭SqlSession sqlSession.close(); System.out.println(retResult); } @Test public void testDelete(){ SqlSession sqlSession = MyBatisUtil.getSqlSession(true); /** * 映射sql的标识字符串, * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, * deleteUser是delete标签的id属性值,通过delete标签的id属性值就可以找到要执行的SQL */ String statement = "me.gacl.mapping.userMapper.deleteUser";//映射sql的标识字符串 //执行删除操作 int retResult = sqlSession.delete(statement,5); //使用SqlSession执行完SQL之后需要关闭SqlSession sqlSession.close(); System.out.println(retResult); } @Test public void testGetAll(){ SqlSession sqlSession = MyBatisUtil.getSqlSession(); /** * 映射sql的标识字符串, * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, * getAllUsers是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL */ String statement = "me.gacl.mapping.userMapper.getAllUsers";//映射sql的标识字符串 //执行查询操作,将查询结果自动封装成List<User>返回 List<User> lstUsers = sqlSession.selectList(statement); //使用SqlSession执行完SQL之后需要关闭SqlSession sqlSession.close(); System.out.println(lstUsers); } }