MyBatis对表执行CRUD操作

来源:互联网 发布:网网络加速器 编辑:程序博客网 时间:2024/06/13 06:13

一、使用MyBatis对表执行CRUD操作——基于XML的实现

1、定义sql映射xml文件

  userMapper.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 注意:使用mapper代理方法开发,namespace有特殊重要的作用 --><mapper namespace="com.baowei.entity.User"><!-- 在 映射文件中配置很多sql语句 --><!-- 需求:通过id查询用户表的记录 --><!-- 通过 select执行数据库查询 id:标识 映射文件中的 sql 将sql语句封装到mappedStatement对象中,所以将id称为statement的id parameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号 #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 --><select id="findUserById" parameterType="int" resultType="com.baowei.entity.User">SELECT* FROM USER WHERE id=#{value}</select><!-- 根据用户名称模糊查询用户信息,可能返回多条 resultType:指定就是单条记录所映射的java对象 类型 ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。 使用${}拼接sql,引起 sql注入 ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value --><select id="findUserByName" parameterType="java.lang.String"resultType="com.baowei.entity.User">SELECT * FROM USER WHERE name LIKE '%${value}%'</select><!-- 添加用户 parameterType:指定输入 参数类型是pojo(包括 用户信息) #{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值 --><insert id="insertUser" parameterType="com.baowei.entity.User"><!-- 将插入数据的主键返回,返回到user对象中 SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键 keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性 order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序 resultType:指定SELECT LAST_INSERT_ID()的结果类型 --><selectKey keyProperty="id" order="AFTER" resultType="int">SELECTLAST_INSERT_ID()</selectKey>insert into user(name,age)values(#{name},#{age})</insert><!-- 删除 用户 根据id删除用户,需要输入 id值 --><delete id="deleteUser" parameterType="java.lang.Integer">delete from user whereid=#{id}</delete><!-- 根据id更新用户 分析: 需要传入用户的id 需要传入用户的更新信息 parameterType指定user对象,包括 id和更新信息,注意:id必须存在 #{id}:从输入 user对象中获取id属性值 --><update id="updateUser" parameterType="com.baowei.entity.User">update user setname=#{name},age=#{age}where id=#{id}</update></mapper>

2、在SqlMapConfig.xml中的配置

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties resource="db.properties"></properties><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis --><transactionManager type="JDBC" /><!-- 数据库连接池,由mybatis管理 --><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!-- 加载 映射文件 --><mappers><!-- 注册userMapper.xml文件, userMapper.xml位于com.baowei.mapping/这个包下,所以resource写成com/baowei/mapping/userMapper.xml --><mapper resource="com/baowei/mapping/userMapper.xml" /></mappers></configuration>


  

3、单元测试类代码如下:

import java.io.InputStream;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.Before;import org.junit.Test;import com.baowei.entity.User;public class UserDaoXmlTest {private SqlSession sqlSession;@Beforepublic void setUp() throws Exception {String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();}@Testpublic void testFindUserById() throws Exception {String statement = "com.baowei.entity.User.findUserById";// 映射sql的标识字符串// 执行查询返回一个唯一user对象的sqlUser user = sqlSession.selectOne(statement, 2);System.out.println(user);}@Testpublic void testfindUserByName() throws Exception {String statement = "com.baowei.entity.User.findUserByName";// 映射sql的标识字符串// 执行查询返回一个唯一user对象的sqlUser user = sqlSession.selectOne(statement, "1111");System.out.println(user);}@Testpublic void testinsertUser() throws Exception {String statement = "com.baowei.entity.User.insertUser";// 映射sql的标识字符串// 执行查询返回一个唯一user对象的sqlUser user = new User();user.setAge(4444);user.setName("44");sqlSession.insert(statement, user);sqlSession.commit();System.out.println(user.getId());}@Testpublic void testdeleteUser() throws Exception {String statement = "com.baowei.entity.User.deleteUser";// 映射sql的标识字符串// 执行查询返回一个唯一user对象的sqlsqlSession.insert(statement, 19);sqlSession.commit();}@Testpublic void testupdateUser() throws Exception {String statement = "com.baowei.entity.User.updateUser";// 映射sql的标识字符串// 执行查询返回一个唯一user对象的sqlUser user = new User();user.setId(19);user.setAge(122);user.setName("12");sqlSession.update(statement, user);sqlSession.commit();}}

二、使用MyBatis对表执行CRUD操作——基于注解的实现

  1、定义sql映射的接口

  IUserMapper接口的代码如下:

import java.util.List;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import com.baowei.entity.User;public interface IUserMapper {// 使用@Insert注解指明add方法要执行的SQL@Insert("insert into user(name, age) values(#{name}, #{age})")public int add(User user);// 使用@Delete注解指明deleteById方法要执行的SQL@Delete("delete from user where id=#{id}")public int deleteById(int id);// 使用@Update注解指明update方法要执行的SQL@Update("update user set name=#{name},age=#{age} where id=#{id}")public int update(User user);// 使用@Select注解指明getById方法要执行的SQL@Select("select * from user where id=#{id}")public User getById(int id);// 使用@Select注解指明getAll方法要执行的SQL@Select("select * from user")public List<User> getAll();}

  需要说明的是,我们不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。

  2、在SqlMapConfig.xml.xml文件中注册这个映射接口

<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties resource="db.properties"></properties><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis --><transactionManager type="JDBC" /><!-- 数据库连接池,由mybatis管理 --><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!-- 加载 映射文件 --><mappers><!-- 注册userMapper.xml文件, 19 userMapper.xml位于com.baowei.mapping/这个包下,所以resource写成com/baowei/mapping/userMapper.xml --><!-- <mapper resource="com/baowei/mapping/userMapper.xml" /> --><!-- 注册UserMapper映射接口 --><mapper class="com.baowei.mapping.IUserMapper" /></mappers></configuration>

  单元测试类的代码如下:

import java.io.InputStream;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.Before;import org.junit.Test;import com.baowei.entity.User;import com.baowei.mapping.IUserMapper;public class UserDaoAnnationTest {private SqlSession sqlSession;@Beforepublic void setUp() throws Exception {String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();}@Testpublic void testFindUserById() throws Exception {// 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);User user = mapper.getById(1);// 使用SqlSession执行完SQL之后需要关闭SqlSessionsqlSession.close();System.out.println(user.toString());}@Testpublic void testinsertUser() throws Exception {// 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);User user = new User();user.setName("666");user.setAge(20);int add = mapper.add(user);sqlSession.commit();// 使用SqlSession执行完SQL之后需要关闭SqlSessionsqlSession.close();System.out.println(add);}@Testpublic void testdeleteUser() throws Exception {// 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);mapper.deleteById(22);sqlSession.commit();// 使用SqlSession执行完SQL之后需要关闭SqlSessionsqlSession.close();}@Testpublic void testupdateUser() throws Exception {// 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);User user = new User();user.setId(22);user.setName("777");user.setAge(20);mapper.update(user);sqlSession.commit();// 使用SqlSession执行完SQL之后需要关闭SqlSessionsqlSession.close();}}

三、使用MyBatis对表执行CRUD操作——基于Mapper代理的实现

    1、定义UserMapper.java的接口,和userMapper.xml的映射文件

       

    2、关于userMapper.xml的配置

          

    3、UserMapper.java的内容

import java.util.List;import com.baowei.entity.User;public interface UserMapper {public User findUserById(int id) throws Exception;public List<User> findUserByName(String name) throws Exception;public void insertUser(User user) throws Exception;public void deleteUser(int id) throws Exception;public void updateUser(User user) throws Exception;}

    4、userMapper.xml的内容

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 注意:使用mapper代理方法开发,namespace有特殊重要的作用 --><mapper namespace="com.baowei.mapper.UserMapper"><!-- 在 映射文件中配置很多sql语句 --><!-- 需求:通过id查询用户表的记录 --><!-- 通过 select执行数据库查询 id:标识 映射文件中的 sql 将sql语句封装到mappedStatement对象中,所以将id称为statement的id parameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号 #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 --><select id="findUserById" parameterType="int" resultType="com.baowei.entity.User">SELECT* FROM USER WHERE id=#{value}</select><!-- 根据用户名称模糊查询用户信息,可能返回多条 resultType:指定就是单条记录所映射的java对象 类型 ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。 使用${}拼接sql,引起 sql注入 ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value --><select id="findUserByName" parameterType="java.lang.String"resultType="com.baowei.entity.User">SELECT * FROM USER WHERE name LIKE '%${value}%'</select><!-- 添加用户 parameterType:指定输入 参数类型是pojo(包括 用户信息) #{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值 --><insert id="insertUser" parameterType="com.baowei.entity.User"><!-- 将插入数据的主键返回,返回到user对象中 SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键 keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性 order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序 resultType:指定SELECT LAST_INSERT_ID()的结果类型 --><selectKey keyProperty="id" order="AFTER" resultType="int">SELECTLAST_INSERT_ID()</selectKey>insert into user(name,age)values(#{name},#{age})</insert><!-- 删除 用户 根据id删除用户,需要输入 id值 --><delete id="deleteUser" parameterType="java.lang.Integer">delete from user whereid=#{id}</delete><!-- 根据id更新用户 分析: 需要传入用户的id 需要传入用户的更新信息 parameterType指定user对象,包括 id和更新信息,注意:id必须存在 #{id}:从输入 user对象中获取id属性值 --><update id="updateUser" parameterType="com.baowei.entity.User">update user setname=#{name},age=#{age}where id=#{id}</update></mapper>
     5、在SqlMapConfig.xml的而配置

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties resource="db.properties"></properties><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis --><transactionManager type="JDBC" /><!-- 数据库连接池,由mybatis管理 --><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!-- 加载 映射文件 --><mappers><mapper class="com.baowei.mapper.UserMapper" /></mappers></configuration>

     6、测试代码

import java.io.InputStream;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.Before;import org.junit.Test;import com.baowei.entity.User;import com.baowei.mapper.UserMapper;public class UserDaoMapperTest {private SqlSession sqlSession;@Beforepublic void setUp() throws Exception {String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();}@Testpublic void testFindUserById() throws Exception {UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.findUserById(1);sqlSession.close();System.out.println(user.toString());}@Testpublic void testinsertUser() throws Exception {UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setName("666");user.setAge(20);mapper.insertUser(user);sqlSession.commit();sqlSession.close();}@Testpublic void testdeleteUser() throws Exception {UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.deleteUser(23);sqlSession.commit();// 使用SqlSession执行完SQL之后需要关闭SqlSessionsqlSession.close();}@Testpublic void testupdateUser() throws Exception {UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setId(23);user.setName("777");user.setAge(20);mapper.updateUser(user);sqlSession.commit();// 使用SqlSession执行完SQL之后需要关闭SqlSessionsqlSession.close();}}

四、代码下载

代码下载


1 0