1. 程式人生 > 其它 >mybatis 模糊查詢寫法_跟著我 簡單學下Mybatis的CRUD操作

mybatis 模糊查詢寫法_跟著我 簡單學下Mybatis的CRUD操作

技術標籤:mybatis 模糊查詢寫法

Mybatis 學習內容

搭建環境

加入依賴架包

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>

建立實體類

    private Integer deptId;
    private String deptName;
    

建立VO類

   private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    

建立介面

package com.yang.dao;

import com.yang.domain.QueryVo;
import com.yang.domain.User;

import java.util.List;

/**
 *
 * 使用者的持久層介面
 */
public interface IUserDao {

    /**
     * 查詢所有使用者
     * @return
     */
    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);
}

配置SqlMapConfig.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">
<configuration>
    <!-- 配置properties
        可以在標籤內部配置連線資料庫的資訊。也可以通過屬性引用外部配置檔案資訊
        resource屬性: 常用的
            用於指定配置檔案的位置,是按照類路徑的寫法來寫,並且必須存在於類路徑下。
        url屬性:
            是要求按照Url的寫法來寫地址
            URL:Uniform Resource Locator 統一資源定位符。它是可以唯一標識一個資源的位置。
            它的寫法:
                http://localhost:8080/mybatisserver/demo1Servlet
                協議      主機     埠       URI

            URI:Uniform Resource Identifier 統一資源識別符號。它是在應用中可以唯一定位一個資源的。
    -->
    <properties url="file:///D:ToolsIdeaworkmybatis_examplesrcmainresourcesjdbcConfig.properties">
       <!-- <property name="driver" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property>
        <property name="username" value="root"></property>
        <property name="password" value="1234"></property>-->
    </properties>

    <!--使用typeAliases配置別名,它只能配置domain中類的別名 -->
    <typeAliases>
        <!--typeAlias用於配置別名。type屬性指定的是實體類全限定類名。alias屬性指定別名,當指定了別名就再區分大小寫 
        <typeAlias type="com.yang.domain.User" alias="user"></typeAlias>-->

        <!-- 用於指定要配置別名的包,當指定之後,該包下的實體類都會註冊別名,並且類名就是別名,不再區分大小寫-->
        <package name="com.yang.domain"></package>
    </typeAliases>

    <!--配置環境-->
    <environments default="mysql">
        <!-- 配置mysql的環境-->
        <environment id="mysql">
            <!-- 配置事務 -->
            <transactionManager type="JDBC"></transactionManager>

            <!--配置連線池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </dataSource>
        </environment>
    </environments>
    <!-- 配置對映檔案的位置 -->
    <mappers>
        <mapper resource="com/yang/dao/IUserDao.xml"></mapper>
        <!-- package標籤是用於指定dao介面所在的包,當指定了之後就不需要在寫mapper以及resource或者class了 -->
<!--        <package name="com.yang.dao"></package>-->
    </mappers>
</configuration>

配置log4j.properties檔案

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn

配置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.yang.dao.IUserDao">

    <!-- 配置 查詢結果的列名和實體類的屬性名的對應關係 -->
    <resultMap id="userMap" type="uSeR">
        <!-- 主鍵欄位的對應 -->
        <id property="deptId" column="dept_id"></id>
        <!--非主鍵欄位的對應-->
        <result property="deptName" column="dept_name"></result>
    </resultMap>


    <!-- 查詢所有 -->
    <select id="findAll" resultMap="userMap">
        <!--select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;-->
        select * from tbl_dept;
    </select>

    <!-- 儲存使用者 -->
    <insert id="saveUser" parameterType="user">
        <!-- 配置插入操作後,獲取插入資料的id
        keyProperty  實體類的id
        -->
        <selectKey keyProperty="deptId" keyColumn="dept_id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into tbl_dept(dept_name)values(#{deptName});
    </insert>

    <!-- 更新使用者 -->
    <update id="updateUser" parameterType="USER">
        update tbl_dept set dept_name=#{deptName} where dept_id=#{deptId}
    </update>

    <!-- 刪除使用者-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from tbl_dept where dept_id = #{deptId}
    </delete>

    <!-- 根據id查詢使用者 -->
    <select id="findById" parameterType="INT" resultMap="userMap">
        select * from tbl_dept where dept_id = #{deptId}
    </select>

    <!-- 根據名稱模糊查詢 -->
    <select id="findByName" parameterType="string" resultMap="userMap">
          select * from tbl_dept where dept_name like #{deptName}
        <!-- select * from user where username like '%${value}%'-->
   </select>

    <!-- 獲取使用者的總記錄條數 -->
    <select id="findTotal" resultType="int">
        select count(dept_id) from tbl_dept;
    </select>

    <!-- 根據queryVo的條件查詢使用者 -->
    <select id="findUserByVo" parameterType="com.yang.domain.QueryVo" resultMap="userMap">
        select * from tbl_dept where dept_name like #{user.deptName}
    </select>
</mapper>

測試類

package com.yang.test.test;

import com.yang.dao.IUserDao;
import com.yang.domain.QueryVo;
import com.yang.domain.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.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;


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.setDeptName("modify User property");
        System.out.println("儲存操作之前:"+user);
        //5.執行儲存方法
        userDao.saveUser(user);

        System.out.println("儲存操作之後:"+user);
    }

    /**
     * 測試更新操作
     */
    @Test
    public void testUpdate(){
        User user = new User();
        user.setDeptId(2);
        user.setDeptName("update user");

        //5.執行儲存方法
        userDao.updateUser(user);
    }
//
    /**
     * 測試刪除操作
     */
    @Test
    public void testDelete(){
        //5.執行刪除方法
        userDao.deleteUser(5);
    }

    /**
     *
     */
    @Test
    public void testFindOne(){
        //5.執行查詢一個方法
        User  user = userDao.findById(2);
        System.out.println(user);
    }

    /**
     * 測試模糊查詢操作
     */
    @Test
    public void testFindByName(){
        //5.執行查詢一個方法
        List<User> users = userDao.findByName("%m%");
//        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.setDeptName("%m%");
        vo.setUser(user);
        //5.執行查詢一個方法
        List<User> users = userDao.findUserByVo(vo);
        for(User u : users){
            System.out.println(u);
        }
    }
}

64acf5e68355995f0fac5764cb6c7528.png