Mybatis_02_CRUD
一、普通CRUD
目录结构

1.pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cmdzz</groupId> <artifactId>mybatis_day02_CRUD</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <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>5.1.6</version> </dependency> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
2.SqlMapConfgi.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"> <!-- mybatis的主配置文件 --> <configuration> <!--配置环境 default="mysql" 随便写 当时下面的 environment id 要一致 --> <environments default="mysql"> <!--配置mysql的环境--> <environment id="mysql"> <!--配置事务类型--> <transactionManager type="JDBC"></transactionManager> <!--配置数据源(连接池)--> <dataSource type="POOLED"> <!-- 配置连接数据库的4个基本信息 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis57plage"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --> <mappers> <mapper resource="com/cmdzz/dao/IUserDao.xml"/> </mappers> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 如果是用注解来配置的话,此处应该使用class属性指定被注解的dao全限定类名 --> <!-- <mappers> <mapper class="com.cmdzz.dao.IUserDao"/> </mappers>--> </configuration>
3.IUserDao.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="com.cmdzz.dao.IUserDao"> <!--配置查询所有 id="findAll" 是UserDao方法名 要一致 --> <select id="findAll" resultType="com.cmdzz.domain.User"> select * from user </select> <!--保存用户--> <insert id="saveUser" parameterType="com.cmdzz.domain.User"> insert into user(username,address,sex,birthday)value (#{userName},#{address},#{sex},#{birthday}) </insert>
<!-- 保存用户 查出插入后的id-->
<!--<insert id="saveUser" parameterType="user">
<!-- 配置插入操作后,获取插入数据的id -->
<selectKey keyProperty="userId" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday)values(#{userName},#{userAddress},#{userSex},#{userBirthday});
</insert>-->
<!--更新用户--> <update id="updateUser" parameterType="com.cmdzz.domain.User"> update user set username=#{userName},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id} </update> <!-- 删除用户 由于接口中只有一个参数传进来,所以占位符#{}里面可以随便写--> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id = #{uid} </delete> <!-- 根据id查询用户 --> <select id="findById" parameterType="INT" resultType="com.cmdzz.domain.User"> select * from user where id = #{uid} </select> <!-- 根据名称模糊查询 --> <select id="findByName" parameterType="string" resultType="com.cmdzz.domain.User"> select * from user where username like #{name} <!-- select * from user where username like '%${value}%'--> </select> <!-- 获取用户的总记录条数 --> <select id="findTotal" resultType="int"> select count(id) from user; </select> <!-- 根据queryVo的条件查询用户 --> <!-- <select id="findUserByVo" parameterType="com.itheima.domain.QueryVo" resultMap="userMap"> select * from user where username like #{user.username} </select>--> </mapper>
4.IUserDao.java
package com.cmdzz.dao; /** * @author cmdzz * @date 2019/6/26 - 12:07 */ import com.cmdzz.domain.User; import java.util.List; /** * 用户的持久层接口 */ public interface IUserDao { /** * 查询所有操作 * @return */ /*注解的方式 @Select("select * from user")*/ List<User> findAll(); /** * 保存用户 * @param user */ void saveUser(User user); /** * 更新用户 * @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(); /** * 根据queryVo中的条件查询用户 * @param vo * @return */ // List<User> findUserByVo(QueryVo vo); }
5.MybatisTest.java
package com.cmdzz.test; import com.cmdzz.dao.IUserDao; import com.cmdzz.domain.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.scripting.xmltags.ForEachSqlNode; 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.InputStream; import java.util.Date; import java.util.List; /** * @author cmdzz * @date 2019/6/26 - 17:21 */ public class MybatisTest { private InputStream in; private SqlSession sqlSession; private IUserDao userDao; @Before//用于在测试方法执行之前执行 public void init()throws Exception{ //1.读取配置文件,生成字节输入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.获取SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.获取SqlSession对象 sqlSession = factory.openSession(); //4.获取dao的代理对象 userDao = sqlSession.getMapper(IUserDao.class); } @After//用于在测试方法执行之后执行 public void destroy()throws Exception{ //提交事务 sqlSession.commit(); //6.释放资源 sqlSession.close(); in.close(); } /** * 测试查询所有 */ @Test public void testFindAll() { //5.执行查询所有方法 List<User> users = userDao.findAll(); for(User user:users){ System.out.println(user); } } /** * 测试保存操作 */ @Test public void testSave(){ User user = new User(); user.setUserName("modify User property"); user.setAddress("北京市顺义区"); user.setSex("男"); user.setBirthday(new Date()); System.out.println("保存操作之前:"+user); //5.执行保存方法 userDao.saveUser(user); System.out.println("保存操作之后:"+user); } /** * 测试更新操作 */ @Test public void testUpdate(){ User user = new User(); user.setId(50); user.setUserName("mybastis update user"); user.setAddress("北京市顺义区"); user.setSex("女"); user.setBirthday(new Date()); //5.执行保存方法 userDao.updateUser(user); } /** * 测试删除操作 */ @Test public void testDelete(){ //5.执行删除方法 userDao.deleteUser(50); } /** * 测试查询一个操作 */ @Test public void testFindOne(){ //5.执行查询一个方法 User user = userDao.findById(50); System.out.println(user); } /** * 测试模糊查询操作 */ @Test public void testFindByName(){ //5.执行查询一个方法 List<User> users = userDao.findByName("%王%"); // List<User> users = userDao.findByName("王"); for(User user : users){ System.out.println(user); } } /** * 测试查询总记录条数 */ @Test public void testFindTotal(){ //5.执行查询一个方法 int count = userDao.findTotal(); System.out.println(count); } /** * 测试使用QueryVo作为查询条件 */ /* @Test public void testFindByVo(){ QueryVo vo = new QueryVo(); User user = new User(); user.setUserName("%王%"); vo.setUser(user); //5.执行查询一个方法 List<User> users = userDao.findUserByVo(vo); for(User u : users){ System.out.println(u); } } */ }
注意:${}的$是拼接字符串、#{}的#是占位符
在insert 和update sql语句 后面用 select last_insert_id();可以查出插入或更新后的id;
二、封装ResultMap
1.IUserDao.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="com.cmdzz.dao.IUserDao"> <!-- 配置 查询结果的列名和实体类的属性名的对应关系 id 是别的查询引用名称 type是封装到哪个类 --> <resultMap id="userMap" type="com.cmdzz.domain.User"> <!-- 主键字段的对应 --> <id property="id" column="id"></id> <!--非主键字段的对应 property是实体类属性 column是数据库字段 --> <result property="userName" column="username"></result> <result property="address" column="address"></result> <result property="sex" column="sex"></result> <result property="birthday" column="birthday"></result> </resultMap> <!--配置查询所有 id="findAll" 是UserDao方法名 要一致 --> <select id="findAll" resultType="com.cmdzz.domain.User"> select * from user </select> <!--保存用户--> <!-- <insert id="saveUser" parameterType="com.cmdzz.domain.User"> insert into user(username,address,sex,birthday)value (#{userName},#{address},#{sex},#{birthday}) </insert> --> <!-- 保存用户 --> <insert id="saveUser" parameterType="com.cmdzz.domain.User"> <!-- 配置插入操作后,获取插入数据的id --> <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER"> select last_insert_id(); </selectKey> insert into user(username,address,sex,birthday)values(#{userName},#{userAddress},#{userSex},#{userBirthday}); </insert> <!--更新用户--> <update id="updateUser" parameterType="com.cmdzz.domain.User"> update user set username=#{userName},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id} </update> <!-- 删除用户 由于接口中只有一个参数传进来,所以占位符#{}里面可以随便写--> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id = #{uid} </delete> <!-- 根据id查询用户 --> <select id="findById" parameterType="INT" resultType="com.cmdzz.domain.User"> select * from user where id = #{uid} </select> <!-- 根据名称模糊查询 --> <select id="findByName" parameterType="string" resultType="com.cmdzz.domain.User"> select * from user where username like #{name} <!-- select * from user where username like '%${value}%'--> </select> <!-- 获取用户的总记录条数 --> <select id="findTotal" resultType="int"> select count(id) from user; </select> <!-- 根据queryVo的条件查询用户 --> <select id="findUserByVo" parameterType="com.cmdzz.domain.QueryVo" resultMap="userMap"> select * from user where username like #{user.userName} </select> </mapper>
2.QueryVo.java
package com.cmdzz.domain; /** * @author 黑马程序员 * @Company */ public class QueryVo { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
3.IUserDao增加一个方法
/** * 根据queryVo中的条件查询用户 * @param vo * @return */ List<User> findUserByVo(QueryVo vo);
4.MybatisTest.java增加方法
/** * 测试使用QueryVo作为查询条件 */ @Test public void testFindByVo(){ QueryVo vo = new QueryVo(); User user = new User(); user.setUserName("%王%"); vo.setUser(user); //5.执行查询一个方法 List<User> users = userDao.findUserByVo(vo); for(User u : users){ System.out.println(u); } }
5.测试结果

学习记录,网上找的,自己写的都记录下来。如有雷同并且侵犯到您的权益,请联系本人修改。
浙公网安备 33010602011771号