MyBatis学习3之入门案例CRUD

开发步骤

第一步:引入jar包(略)

第二步:在资源文件下创建一个SqlMapConfig.xml核心配置文件(略)

第三步:在com.pp包下面创建一个pojo包,作为实体类包。然后创建一个User类。(略)

第四步:在com.pp包下创建一个dao包, 在dao层创建UserDao接口类

package com.pp.dao;
import com.pp.pojo.User;
import java.util.List;
public interface UserDao {
    // 按照用户名和性别查找
    List<User> findUserByUserNameAndSex(String name,String sex);
 }

第五步:在dao层创建UserDaoImpl实现类继承和实现UserDao接口类的抽象方法

package com.pp.dao;

import com.pp.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDaoImpl implements UserDao{
    /*
    *
    * 1.有会话工厂
    * 2.初始化sqlseesion
    * 3.
    * */

    //新建sqlSessionFactory会话工厂
    private SqlSessionFactory sqlSessionFactory;
    //构造方法,是创建UserDaoImpl类,谁就要使用构造方法,然后把会话工厂也拿到
    public UserDaoImpl( SqlSessionFactory sqlSessionFactory){
        this.sqlSessionFactory=sqlSessionFactory;
    }
   public List<User> findUserByUserName(String name) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> list =sqlSession.selectList("pp.findUserByUserName", name);
        return list;
    }
} 

这里重点关注findUserByUserName()方法,首先进行工厂的开启会话,然后调用会话工厂的selectList()第一个参数使用sqlMapperConfig.xml的

第六步:在com.pp下创建的mapper包中新建一个UserMapper接口

package com.pp.mapper;

import com.pp.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> findUserByUserName(String name);
 }  

第七步: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="pp">
	<select id="findUserByUserName" parameterType="string" resultType="com.pp.pojo.User">
         select *  from user where username like  '%${value}%'
     </select>
</mapper>

标签中 ,id填写UserMapper接口中的findUserByUserName()方法名,parameterType代表入口参数这里填写string,resultType代表返回结果,参数指向放回的user类的包路径,这里是com.pp.pojo.User。前面的占位符是Interger类型使用的是#{_prams},这里的入口参数类型是String,所以占位符参数使用的是${value}

第八步:编写测试类

...
...
...

public class UserTest {
    private SqlSessionFactory factory;
    @Test
    @Before
    public void Setup() throws IOException {
        String res="SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(res);
        factory=new SqlSessionFactoryBuilder().build(inputStream);
    }
    @Test
    public void fun2(){
        UserDaoImpl userDao = new UserDaoImpl(factory);
        List<User> list = userDao.findUserByUserName("王");
        System.out.println(list);
    }
}

第九步:测试结果

MyBatis学习3之入门案例CRUD

后续:前面整个步骤过程已经演示的很清楚了,后面的快速演示。

第一步:在dao层包下的UserDao写入下面方法

package com.pp.dao;

import com.pp.pojo.User;

import java.util.List;

public interface UserDao {
     // 按照用户名和性别查找
    List<User> findUserByUserNameAndSex(String name,String sex);
    //插入用户
    Integer insertUser(User user);
}

第二步:在dao层包下的UserDaoImpl写入下面方法

package com.pp.dao;

import com.pp.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDaoImpl implements UserDao{
   //新建sqlSessionFactory会话工厂
    private SqlSessionFactory sqlSessionFactory;
    //构造方法,是创建UserDaoImpl类,谁就要使用构造方法,然后把会话工厂也拿到
    public UserDaoImpl( SqlSessionFactory sqlSessionFactory){
        this.sqlSessionFactory=sqlSessionFactory;
    }
	
	 public List<User> findUserByUserNameAndSex(String name, String sex) {
        User user = new User();
        user.setUsername(name);
        user.setSex(sex);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> list = sqlSession.selectList("pp.findUserByUserNameAndSex", user);

        return list;
    }

    public Integer insertUser(User user) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int insert = sqlSession.insert("pp.insertUser", user);
        sqlSession.commit();
        return insert;
    }
}

第三步:在UserMapper接口类中写入以下方法

package com.pp.mapper;

import com.pp.pojo.User;

import java.util.List;

public interface UserMapper {
	 List<User> findUserByUserNameAndSex(String name,String sex);
    Integer insertUser(User user);
}

第四步:在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="pp">
	<select id="findUserByUserNameAndSex" parameterType="com.pp.pojo.User" resultType="com.pp.pojo.User">

         select *  from user
         <include refid="user_where"/>
     </select>
    <sql id="user_where">
        <where>
            <if test="username !=null and username !=''" >
                and username like  '%${username}%'
            </if>
            <if test="sex !=null and sex !=''" >
                and sex=#{sex}
            </if>
        </where>
    </sql>

     <!--mysql自增主键返回-->
    <insert id="insertUser" parameterType="com.pp.pojo.User">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            select LAST_INSERT_ID()
        </selectKey>
        insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address});
    </insert>

<!--

    通过修改sql映射文件,可以将mysql自增主键返回:
<insert id="insertUser" parameterType="cn.pp.mybatis.po.User">-->
       <!-- selectKey将主键返回,需要再返回
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
        select LAST_INSERT_ID()
    </selectKey>
    insert into user(username,birthday,sex,address)
    values(#{username},#{birthday},#{sex},#{address});
</insert>
        添加selectKey实现将主键返回
        keyProperty:返回的主键存储在pojo中的哪个属性
        order:selectKey的执行顺序,是相对与insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after
        resultType:返回的主键是什么类型
        LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值。
    -->
</mapper>

第五步:编写测试类

import com.pp.dao.UserDaoImpl;
import com.pp.mapper.UserMapper;
import com.pp.pojo.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class UserTest {
    private SqlSessionFactory factory;
    @Test
    @Before
    public void Setup() throws IOException {
        String res="SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(res);
        factory=new SqlSessionFactoryBuilder().build(inputStream);
    }
     @Test
    public void fun3(){
        UserDaoImpl userDao = new UserDaoImpl(factory);
        List<User> list = userDao.findUserByUserNameAndSex("王", "男");

        System.out.println(list);
    }
    @Test
    public void fun4(){
        UserDaoImpl userDao = new UserDaoImpl(factory);
        User user = new User();
        user.setSex("男");
        user.setUsername("对对对");
        user.setAddress("西安");
        user.setBirthday(new Date());
        Integer integer = userDao.insertUser(user);
        System.out.println(integer);

}

第六步:测试结果(略)

开发步骤省略部分在MyBatis学习2之入门案例有详细讲解

上一篇:MybatisPlus 使用总结 2021-09-22


下一篇:一个工具类搞定 CRUD 的创建人、修改人、时间等字段赋值!