mybatis框架學習2——動態SQL

前言:這個文章的定位不是實現的步驟,而是實現過程中遇到的問題。並且我寫的步驟是別人的步驟的記錄,算不了什麼,後面對使用過程中遇到的問題以及解決的方法纔是自己寫的,有價值的地方。

寫這篇文章的出發點一個是爲了保障自己學以致用,一個是查漏補缺。

而且很多教程雖然說按照那個步驟可以成功,但也可能不成功,要麼是自己操作有誤,要麼是版本變了,還有可能自己基礎沒學好,前置知識不夠。我最開始寫Java的時候連創建父類和接口類都不會,直接創建一個類,然後複製粘貼,最後報錯。僵硬~

寫這類博客,即寫步驟,又寫操作過程中遇到的問題,然後從中吸取教訓,可以讓成功的概率更大。

同時sprig框架學習我打算按照五部分(IOC、bean、AOP、數據庫、事務)進行梳理,最後加個綜合大應用。學前在注意的情況下,會寫前置知識。

Java基礎:https://blog.csdn.net/weixin_42875245/article/details/105951858

IDE使用:https://blog.csdn.net/weixin_42875245/article/details/105867499

Spring學習筆記:https://blog.csdn.net/weixin_42875245/article/details/105631818

Spring見解:https://blog.csdn.net/Haidaiya/article/details/105611801

Spring使用:https://blog.csdn.net/weixin_42875245/article/details/106034031

Mybatis學習筆記:https://blog.csdn.net/weixin_42875245/article/details/105631915

數據庫基礎:https://blog.csdn.net/weixin_42875245/article/details/105786562

MySQL和Navicat的安裝與使用

https://blog.csdn.net/weixin_42875245/article/details/105912850

https://blog.csdn.net/weixin_42875245/article/details/105913078

 

一、引入包

1在eclipse基礎開發環境創建一個mybatistest01的動態web項目,將mybatis的核心包、依賴包以及MySQL的驅動包複製到lib目錄中,併發布到類路徑下。

 

二、創建數據庫

1在MySQL中創建數據庫。

Create database db_mybatis;

User db_mybatis;

Create table t_user(id int(32) primary key auto_increment,username varchar(50),jobs varchar(50),phone varchar(16));

Insert into t_user values (1,’one’,’teacher’,’1111’);

Insert into t_user values (2,’two’,’doctor’,’2222’);

Insert into t_user values (3,’three’,’student’,’3333’);

 

三、動態SQL

1在src目錄下創建log4j.properties文件;代碼如下。

2在src目錄下創建db.properties;代碼如下。

3配置文件mybatis-config.xml。代碼如下

4在src目錄下創建com.ssm.util包,在包中創建工具類mybatisUtil。代碼如下:

5在src目錄下創建com.ssm.po包,在包中創建持久化類User。代碼如下

6在src目錄下創建com.ssm.mapper包,在包中創建映射文件UserMapper.xml。代碼如下。

7在src目錄下創建com.ssm.test包,在包中創建測試類MybatisTest。

8運行:用Junit運行,可以實現查找、

 

四、實驗

1數據庫的操作就不贅述了,

https://blog.csdn.net/weixin_42875245/article/details/105912850

2創建log4j.properties

# Global logging configuration

log4j.rootLogger=ERROR, stdout

# MyBatis logging configuration...

log4j.logger.com.ssm=DEBUG

Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3創建db.properties

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3308/db_mybatis

jdbc.username=root

jdbc.password=root

4創建mybatis-config.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="db.properties" />

    <environments default="mysql">

        <environment id="mysql">

            <transactionManager type="JDBC" />

            <dataSource type="POOLED">

                <!--數據庫驅動 -->

                <property name="driver" value="${jdbc.driver}" />

                <!--連接數據庫的ur1 -->

                <property name="url" value="${jdbc.url}" />

                <!--連接數據庫的用戶名 -->

                <property name="username" value="${jdbc.username}" />

                <!--連接數據庫的密碼-->

                <property name="password" value="${jdbc.password}" />

            </dataSource>

        </environment>

    </environments>

    <mappers>

        <mapper resource="com/ssm/mapper/UserMapper.xml" />

    </mappers>

</configuration>

5創建UserMapper

<?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.ssm.mapper.UserMapper">

    <!--<bind>元素的使用:根據用戶姓名模糊查詢用戶信息 -->

    <select id="findUserByName2" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">

        <!--_parameter.getUsername()也可以直接寫成傳入的字段屬性名,即username  -->

        <bind name="p_username" value="'%'+_parameter.getUsername()+'%'"/>

        select * from t_user

        where username like #{p_username}

    </select>

    <!--<foreach>元素使用 -->

    <select id="findUserByIds" parameterType="List" resultType="com.ssm.po.User">

            select * from t_user where id in

        <foreach item="id" index="index" collection="list" open="(" separator="," close=")">

           #{id}

        </foreach>

    </select>

    <!--<choose>(<when><otherwise>)元素使用 -->

    <select id="findUserByNameOrJobs" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">

            select * from t_user where 1=1

        <choose>

            <when test="username !=null and username !=''">

                and username like concat('%',#{username},'%')

            </when>

            <when test="jobs !=null and jobs !=''">

                and jobs=#{jobs}

            </when>    

            <otherwise>

                and phone is not null

            </otherwise>

        </choose>

    </select>

    <!--<if><where>元素使用 -->

    <select id="findUserByNameAndJobs" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">

        select * from t_user

       <where>

        <if test="username !=null and username !=''">

            and username like concat('%',#{username},'%')

        </if>

        <if test="jobs !=null and jobs !=''">

            and jobs=#{jobs}

        </if>

      </where>

    </select>

    <!--

    <if><trim>元素使用

    <select id="findUserByNameAndJobs" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">

        select * from t_user

       <trim prefix="where" prefixOverrides="and">

        <if test="username !=null and username !=''">

            and username like concat('%',#{username},'%')

        </if>

        <if test="jobs !=null and jobs !=''">

            and jobs=#{jobs}

        </if>

      </trim>

    </select>

    -->

    <!--

    <if>元素使用

    <select id="findUserByNameAndJobs" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">

            select * from t_user where 1=1

        <if test="username !=null and username !=''">

            and username like concat('%',#{username},'%')

        </if>

        <if test="jobs !=null and jobs !=''">

            and jobs=#{jobs}

        </if>

    </select>

    -->

    <!--根據用戶編號獲取用戶信息 -->

    <select id="findUserById" parameterType="Integer" resultType="com.ssm.po.User">

        select * from t_user where id=#{id}

    </select>

    <!--根據用戶名模糊查詢用戶信息 -->

    <select id="findUserByName" parameterType="String" resultType="com.ssm.po.User">

        select * from t_user where username like '%${value}%'

    </select>

    <!--添加客戶信息 -->

    <insert id="addUser" parameterType="com.ssm.po.User">

        insert into t_user(username,jobs,phone) values(#{username},#{jobs},#{phone})

    </insert>

    <!--更新用戶信息 -->

    <update id="updateUser" parameterType="com.ssm.po.User">

        update t_user set username=#{username},jobs=#{jobs},phone=#{phone} where id=#{id}

    </update>

    <!--   

     更新用戶信息

    <update id="updateUser" parameterType="com.ssm.po.User">

        update t_user

        <set>

            <if test="username !=null and username !=''">

                username=#{username}

            </if>

            <if test="jobs !=null and jobs !=''">

                jobs=#{jobs}

            </if>

            <if test="phone !=null and phone !=''">

                phone=#{phone}

            </if>

        </set>

        where id=#{id}

    </update>

     -->

    <!--刪除用戶信息-->

    <delete id="deleteUser" parameterType="Integer">

        delete from t_user where id=#{id}

    </delete>     

</mapper>

6創建持久對象User

package com.ssm.po;

public class User {

    private Integer id;

    private String username;

    private String jobs;

    private String phone;

    public Integer getId() {

        return id;

    }

    public void setId(Integer id) {

        this.id = id;

    }

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public String getJobs() {

        return jobs;

    }

    public void setJobs(String jobs) {

        this.jobs = jobs;

    }

    public String getPhone() {

        return phone;

    }

    public void setPhone(String phone) {

        this.phone = phone;

    }

    public String toString() {

        return "User [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]";

    }

}

7創建工具類

package com.ssm.util;

import java.io.IOException;

import java.io.InputStream;

import java.io.Reader;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtils{

    private static SqlSessionFactory sqlSessionFactory=null;

    static{

        try {

            String resource = "mybatis-config.xml";

            InputStream inputStream = Resources.getResourceAsStream(resource);

            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

        } catch (IOException e) {

            e.printStackTrace();

        }  

    }

    public static SqlSession getSession(){

        return sqlSessionFactory.openSession();

    }

}

8創建測試類

package com.ssm.test;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

 

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.Test;

 

import com.ssm.po.User;

import com.ssm.util.MybatisUtils;

public class MybatisTest {

    /*

     * 根據用戶姓名模糊查詢用戶信息

     */

    @Test

    public void findUserByName2(){

        SqlSession sqlSession = MybatisUtils.getSession();

        User user=new User();

        user.setUsername("s");

        List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByName2", user);

        for (User u : users) {

            System.out.println(u.toString());

        }

        sqlSession.close();   

    }

    /*

     * 根據用戶編號批量查詢用戶信息

     */

    @Test

    public void findUserByIdsTest(){

        SqlSession sqlSession = MybatisUtils.getSession();

        List<Integer> ids=new ArrayList<Integer>();

        ids.add(1);

        ids.add(2);

        List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByIds", ids);

        for (User user : users) {

            System.out.println(user.toString());

        }

        sqlSession.close();

       

    }

    /*

     * 根據用戶姓名或者職業組合條件查詢用戶信息列表

     */

    @Test

    public void findUserByNameOrJobsTest() throws Exception {

        SqlSession sqlSession = MybatisUtils.getSession();

        User user=new User();

        //user.setUsername("zhangsan");

        //user.setJobs("teacher");

        List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByNameOrJobs", user);

        for (User u : users) {

            System.out.println(u.toString());

        }

        sqlSession.close();

    }

    /*

     * 根據用戶姓名和職業組合條件查詢用戶信息列表

     */

    @Test

    public void findUserByNameAndJobsTest() throws Exception {

        //通過工具類生成sqlSession對象

        SqlSession sqlSession = MybatisUtils.getSession();

        //創建User對象,封裝需要組合查詢的條件

        User user=new User();

        user.setUsername("zhangsan");

        user.setJobs("teacher");

        //執行sqlSession的查詢方法,返回結果集

        List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByNameAndJobs", user);

        for (User u : users) {

            System.out.println(u.toString());

        }

        sqlSession.close();

    }

   

    @Test

    public void findUserByIdTest() throws Exception {

        String resource = "mybatis-config.xml";

        InputStream inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();

        User user = sqlSession.selectOne("com.ssm.mapper.UserMapper.findUserById", 1);

        System.out.println(user.toString());

        sqlSession.close();

    }

    @Test

    public void findUserByNameTest() throws Exception {

        String resource = "mybatis-config.xml";

        InputStream inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();

        List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByName", "g");

        for (User user : users) {

            System.out.println(user.toString());

        }

        sqlSession.close();

    }

    @Test

    public void addUserTest() throws Exception {

        String resource = "mybatis-config.xml";

        InputStream inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();

        User user = new User();

        user.setUsername("tom");

        user.setJobs("worker");

        user.setPhone("1234554321");

        int rows = sqlSession.insert("com.ssm.mapper.UserMapper.addUser", user);

        if (rows > 0) {

            System.out.println("成功添加" + rows + "條數據!");

        } else {

            System.out.println("添加數據失敗!");

        }

        sqlSession.commit();

        sqlSession.close();

    }

    @Test

    public void updateUserTest() throws Exception {

        String resource = "mybatis-config.xml";

        InputStream inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();

        User user = new User();

        user.setId(4);

        user.setUsername("tom");

        user.setJobs("teacher");

        user.setPhone("5432112345");

        int rows = sqlSession.update("com.ssm.mapper.UserMapper.addUser", user);

        if (rows > 0) {

            System.out.println("成功修改了" + rows + "條數據!");

        } else {

            System.out.println("修改數據失敗!");

        }

        sqlSession.commit();

        sqlSession.close();

    }

    @Test

    public void deleteUserTest() throws Exception {

        String resource = "mybatis-config.xml";

        InputStream inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();

        int rows = sqlSession.delete("com.ssm.mapper.UserMapper.deleteUser", 4);

        if (rows > 0) {

            System.out.println("成功刪除了" + rows + "條數據!");

        } else {

            System.out.println("刪除數據失敗!");

        }

        sqlSession.commit();

        sqlSession.close();

    }

}

 

 

 

結論:沒遇到問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章