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
- 使用MyBatis对表执行CRUD操作
- MyBatis (2)--对表执行CRUD操作
- 使用MyBatis对表执行CRUD操作
- 使用MyBatis对表执行CRUD操作
- MyBatis对表执行CRUD操作
- MyBatis(二)对表执行CRUD操作
- MyBatis对表执行CRUD(增删改查)操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(2)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- Android Studio 中Conflict with dependency 'com.google.code.findbugs:jsr305'
- springmvc控制登录用户session失效后跳转登录页面
- C++性能比较01
- .NETReflector的破解
- 折半查找判定树及平均查找长度
- MyBatis对表执行CRUD操作
- 欢迎使用CSDN-markdown编辑器
- 数据理解和预处理
- 渐进增强和优雅降级
- TCP/IP四层模型和OSI七层模型的概
- PSET-0:Scratch简单说明
- 2016年12月当前世界经济形势分析--美国的加息计谋
- 〖随记〗四级、申报书 对最近做个总结
- 欢迎使用CSDN-markdown编辑器