1. 程式人生 > 實用技巧 >mybatis crud 學習總結02

mybatis crud 學習總結02

CRUD 的實現


1、db.properties

原因:資料庫的連線直接寫到配置(mybati-config.xml)裡存在安全隱患

解決:將配置的資訊放到一個檔案中管理

右鍵resources --> File --> 填“db.properties”

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=123

到配置中進行引入(properties標籤)和使用(${}

mybati-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> <!-- 配置標籤 -->
    <!-- 匯入db.properties檔案 , 使用 ${} 引入-->
    <properties resource="db.properties"/>

<environments default="development"> <!-- 總環境  預設:development -->
    <environment id="development"> <!-- 環境 名為:development -->
        <transactionManager type="JDBC"/> <!-- 事務管理器  型別:JDBC (事務:確保操作完整性,要麼成功要麼失敗)-->
        <dataSource type="POOLED"> <!-- 資料來源 型別:POOLED-->
            <property name="driver" value="${driver}"/> <!--屬性 名:驅動 值:..mysql(使用的何種資料庫).. -->
            <!-- 屬性 名:url 值:資料連線地址+規則(如:字符集:UTF-8) -->
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/> <!-- 屬性 名:資料庫使用者名稱  值:root-->
            <property name="password" value="${password}"/> <!--屬性 名:密碼  值:123 -->
        </dataSource>
    </environment>
</environments>
<mappers> <!--對映器 -->
    <mapper resource="com/dao/userMapper.xml"/> <!-- 對映  資源:userMapper.xml -->
</mappers>
</configuration>

2、別名(typeAliases)

原因:為了減少程式碼的冗餘

例如:在userMapping中會常常用到:com.pojo.User,可以進行別名設定。

解決:設定別名,用別名代替全名,減少程式碼冗餘


mybatis-config.xml -->configuration(程式碼最好放到該標籤下的第一位)

    <!--配置別名,注意順序:最好能放到configuration標籤下的第一位。-->
    <typeAliases>
        <typeAlias type="com.pojo.User" alias="User"/> <!--設定com.pojo.User 別名為:User-->
    </typeAliases>

指定包進行別名設定(一般都是使用這個方法)

mybatis-config.xml -->configuration(程式碼最好放到該標籤下的第一位)

<typeAliases>
    <package name="com.pojo"/> <!--在該包下所有檔案設別名為:檔名-->
</typeAliases>

驗證效果:

com/dao/userMapper.xml 為設別名前(com.pojo.User)的程式碼

<select id="selectUser" resultType="com.pojo.User">

設定了別名後(使用別名:User)的程式碼,減少了程式碼冗餘

<select id="selectUser" resultType="User">

3、查詢示例

1、示範:查詢功能

1、設定介面

userMapper (介面)

package com.dao;

import com.pojo.User;

import java.util.List;

public interface userMapper {
    //查詢全部使用者
    List<User> selectUser();
    //根據id查詢使用者
    User selectUserById(int id);
}

2、在userMapper.xml設定SQL語句

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="com.dao.userMapper"> <!-- 對映器  名稱空間:對映到那個類的地址  -->
    <select id="selectUser" resultType="User"> <!-- 查詢  名:selectUser  結果型別:com.pojo.User -->
    	select * from user
    </select>
    
    <select id="selectUserById" resultType="User">
    	select * from user where id = #{id}
    </select>
</mapper>

3、測試

MyTest.java

import com.dao.userMapper;
import com.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import utils.MybatisUtils;

import java.util.List;

public class MyTest {
    @Test
    public void selectUser() {
        SqlSession session = MybatisUtils.getSession();
        userMapper mapper = session.getMapper(userMapper.class);

        User user = mapper.selectUserById(1);
        System.out.println("通過Id查詢:"+user);

        System.out.println("查詢所有:");
        List<User> userAll = mapper.selectUser();
        for (User user1 : userAll) {
            System.out.println(user1);
        }

        session.close();
    }
}

4、crud例項

com/dao/userMapper (介面)

package com.dao;

import com.pojo.User;

import java.util.List;

public interface userMapper {
    //查詢全部使用者
    List<User> selectUser();
    //根據id查詢使用者
    User selectUserById(int id);
    //新增一個使用者
    int addUser(User user);
    //修改一個使用者
    int updateUser(User user);
    //根據id刪除使用者
    int deleteUser(int id);
}

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="com.dao.userMapper"> <!-- 對映器  名稱空間:對映到那個類的地址  -->
    <select id="selectUser" resultType="User"> <!-- 查詢  名:selectUser  結果型別:com.pojo.User -->
        select * from user
    </select>

    <select id="selectUserById" resultType="User">
        select * from user where id = #{id}
    </select>

    <insert id="addUser" parameterType="User">
        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>

    <update id="updateUser" parameterType="User">
        update user set name=#{name},pwd=#{pwd} where id = #{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>
</mapper>

MyTest.java

import com.dao.userMapper;
import com.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import utils.MybatisUtils;

public class MyTest {
    @Test
    public void selectUser() {
        SqlSession session = MybatisUtils.getSession();
        userMapper mapper = session.getMapper(userMapper.class);

        /*通過id查詢*/
/*        User user = mapper.selectUserById(1);
        System.out.println("通過Id查詢:"+user);*/

        /*查詢所有使用者*/
/*        System.out.println("查詢所有:");
        List<User> userAll = mapper.selectUser();
        for (User user1 : userAll) {
            System.out.println(user1);
        }*/

       /*增加使用者*/
/*        User user = new User(6,"趙六","chaoliu"); // 到實體類User中設定:有參構造
        int i = mapper.addUser(user);
        System.out.println(i); // 輸出為1,時表示增加一個使用者成功
        session.commit(); // 提交事務,沒有的話交不到資料庫*/

        /*根據刪除*/
/*        int i = mapper.deleteUser(6);
        System.out.println(i); // 輸出為1,表示刪除一個使用者成功
        session.commit(); //提交事務,重點!不寫的話不會提交到資料庫*/

        /*修改*/
        User user = mapper.selectUserById(1);
        user.setPwd("newPassword");
        int i = mapper.updateUser(user);
        System.out.println(i);
        session.commit(); //提交事務,重點!不寫的話不會提交到資料庫

        session.close();
    }
}