手把手教你搭建Mybatis環境------實現單表(增刪改查)操做

MyBatis環境搭建詳細及執行增刪改查操做

一、第一步

新建的maven項目中pom.xml文件中配置所須要jar包的以來座標java

  • mybatis 包
  • mysql-connector-java 包
  • junit 測試包
  • log4j 日誌包
具體代碼以下:
複製代碼
<?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">
    <parent>
        <artifactId>mybatis_01</artifactId>
        <groupId>com.baoji.mybatis</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>

    <artifactId>mybatis_04_CRUD_insert</artifactId>
    <!-- 導入mybatis相關jar包-->
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>

</project>
複製代碼

二、第二步

按具體需求建目錄結構mysql

編寫實體類和接口並建立對應數據庫的表git

一、編寫實體類:User.java
複製代碼
package com.baoji.mybatis.entity;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private Integer userId;
    private String userName;
    private Date userBirthday;
    private String userSex;
    private String userAddress;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Date getUserBirthday() {
        return userBirthday;
    }

    public void setUserBirthday(Date userBirthday) {
        this.userBirthday = userBirthday;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' + ", userBirthday=" + userBirthday + ", userSex='" + userSex + '\'' + ", userAddress='" + userAddress + '\'' +
                '}';
    }
}
複製代碼
二、編寫封裝將實體類做爲查詢條件的類  QueryVo.java 
複製代碼
package com.baoji.mybatis.entity;

/**
 *   QueryVo  做爲參數查詢,其實是將對象做爲屬性。將對象包裝起來做爲查詢條件
 */
public class QueryVo {
    private User user;

    public User getUser() {
        return user;
    }

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

複製代碼
編寫接口類
複製代碼
package com.baoji.mybatis.dao;

import com.baoji.mybatis.entity.QueryVo;
import com.baoji.mybatis.entity.User;

import java.util.List;

public interface IUserDao {
    //保存方法
    public void saveUser(User user);
    //修改方法
    public void updateUser(User user);
    //刪除方法
    public void deleteUser(Integer userId);
    //根據id查詢一個user對象
    public User selectOne(Integer id);
    //根據姓名模糊查詢
    public List<User> selectByName(String name);
    //根據query evo條件查詢
    public List<User> findUserByVo(QueryVo vo);
    //查詢全部信息
    public List<User> findAll();
}
複製代碼

三、第三步

在resources資源文件中配置mybatis主配置文件並導入log4j的配置文件github

具體代碼以下:config.xml
複製代碼
<!-- mybatis 主配置文件 -->
<?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 屬性: 經常使用的  (resource="jdbcConfig.properties")
            用於指定配置文件的位置,是按照類路徑的寫法來寫,而且必須存在於類路徑下。
            url屬性:
                是要求按照url的屬性來寫地址
                URL:  統一資源定位符,能夠惟一標識一個資源的位置
                    例如 http://localhost:8080/mybatis/servlet
                         協議    主機    端口號   uri
                uri:  統一資源標識符 ,在應用中能夠惟必定位一個資源的
            -->
    <properties url="file:///H:/JDBC_config/">
        <!--配置鏈接數據庫的四個基本信息-->
        <!--
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis_user?characterEncoding=gbk"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        -->
    </properties>
    <!-- 使用typeAliases起別名,它只能配置entity中類的別名-->
        <typeAliases>
        <!-- typeAlias用於配置別名,type屬性指的是實體類全限定類名,alias屬性指定別名,當指定了別名就再也不區分大小寫-->
       <!-- <typeAlias type="com.baoji.mybatis.entity.User" alias="user"></typeAlias> -->
            <!-- 用於要配置起別名的包,當指定以後,該包下的實體類都會註冊別名,而且類名就是別名,不區分大小寫-->
        <package name="com.baoji.mybatis.entity"/>
    </typeAliases>
    <!-- 配置環境 -->
    <environments default="mysql">
        <!-- 配置mysql的配置環境 -->
        <environment id="mysql">
            <!--配置事務的類型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置數據源(鏈接池)-->
            <dataSource type="POOLED">
                <!--配置鏈接數據庫的四個基本信息-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
複製代碼
<!-- 指定映射配置文件的位置,映射配置文件指的是每一個dao獨立的配置文件 -->
<!-- mybatis的映射配置文件位置必須和dao接口的文件位置相同,包名相同時,不須要實現dao接口 -->
複製代碼
<mappers>
        <!-- <mapper resource="com/baoji/mybatis/dao/IUserDao.xml"></mapper> -->
        <!-- package用於指定dao接口所在的包,當指定了以後就不須要再寫mapper和resource以及class了-->
        <package name="com/baoji/mybatis/dao"/>
    </mappers>
</configuration>
複製代碼

JDBCconfig.properties jdbc配置文件sql

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/eesy_mybatis
username=root
password=root
複製代碼

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 - %m\n

# 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 - %m\n
複製代碼

四、第四步(使用xml方式配置映射文件)

配置位於resources資源文件下的映射文件mapper.xml(映射文件所放的目錄位置要與接口所在位置一致,放在同一種包名下,能夠不用寫接口的實現類,使用代理對象自動實現代理類)apache


此處應注意:安全

當數據庫中字段名與實體類中屬性名一致時: 不須要配置resultMap,在resultType屬性中填寫須要返回類型所在的全路徑名便可bash

當數據庫中字段名與實體類中屬性名一致時: 兩種解決辦法session

第一種:在sql語句中起別名,將數據庫的別名和實體類的屬性名一致便可,執行效率高,很是推薦,可是太麻煩,開發效率低。

select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;
複製代碼

第二種:在配置中添加以下代碼便可(最後將之前的resultType改成resultMap,值爲上面定義的id值)

<!-- 配置查詢結果的列名和實體類的屬性名的對應關係 -->
    <resultMap id="userMap" type="com.baoji.mybatis.entity.User">
        <!-- 主鍵字段的對應 -->
        <id property="userId" column="id"></id>
        <!-- 非主鍵字段的對應 -->
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>
複製代碼

編寫映射配置文件 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.baoji.mybatis.dao.IUserDao">
    <!-- 配置查詢結果的列名和實體類的屬性名的對應關係 -->
    <resultMap id="userMap" type="com.baoji.mybatis.entity.User">
        <!-- 主鍵字段的對應 -->
        <id property="userId" column="id"></id>
        <!-- 非主鍵字段的對應 -->
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>
    <!-- parameterType爲實體類的全路徑 -->
    <!-- 查詢全部 -->
    <insert id="saveUser" parameterType="com.baoji.mybatis.entity.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},#{address},#{sex},#{birthday});
    </insert>
    <!-- 修改操做 -->
    <update id="updateUser" parameterType="com.baoji.mybatis.entity.User">
        update user set username = #{username}, address=#{address},sex = #{sex},birthday = #{birthday} where id = #{id};
    </update>
    <!-- 刪除操做 -->
    <delete id="deleteUser" parameterType="int">
        delete  from user where id = #{id};
    </delete>
    <!-- 根據id查詢一個對象信息 -->
    <select id="selectOne" parameterType="int" resultMap="userMap">
        select * from user where id = #{id};
    </select>
    <!-- 根據姓名模糊查詢 -->
    <select id="selectByName" parameterType="String" resultMap="userMap">
        <!-- 方式一:底層經過佔位符來賦值,使用preparestatement對象,更安全。推薦使用-->
        <!-- select * from user where username like #{name}; -->
        <!-- 方式二:底層經過字符串拼接來賦值,使用statement對象,瞭解便可-->
        select * from user where username like '%${value}%';
    </select>
    <!-- 根據query vo條件模糊查詢 -->
    <select id="findUserByVo" parameterType="com.baoji.mybatis.entity.QueryVo" resultType="com.baoji.mybatis.entity.User">
         select * from user where username like #{user.username};
    </select>
    <!-- 查詢全部信息-->
    <select id="findAll" resultType="com.baoji.mybatis.entity.User">
        select * from user;
    </select>
</mapper>
複製代碼

(使用註解的方式配置映射文件)

在dao接口方法前加@servlet(sql語句)便可實現和xml一樣的效果(簡單開發效率高)

public interface IUserDao {

    /**
     * 查詢全部操做
     * @return
     */
    @Select("select * from user")
    List<User> findAll();
}

複製代碼

五、第五步

編寫測試類

測試類: IUserDaoTest.java
複製代碼
package com.baoji.mybatis.test;

import com.baoji.mybatis.dao.IUserDao;
import com.baoji.mybatis.entity.QueryVo;
import com.baoji.mybatis.entity.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.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class IUserDaoTest {
    private InputStream in;
    private SqlSessionFactory factory;
    private SqlSession sqlSession;
    private IUserDao dao;
    //編寫初始化方法(將重複代碼封裝至此)

    @Before  //此註解是在測試方法以前執行
    public void init() throws IOException {
        //一、讀取配置文件
        in = Resources.getResourceAsStream("Config.xml");
        //二、建立sqlSessionFactory工廠
        factory = new SqlSessionFactoryBuilder().build(in);
        //三、使用工廠建立sqlSession對象
        sqlSession = factory.openSession();
        //四、使用sqlSession獲取dao的代理對象
        dao = sqlSession.getMapper(IUserDao.class);
    }
    @After  //此註解實在測試方法以後執行
    //建立關閉資源方法
    public void destory() throws IOException {
        //提交事務兩種方式(只有提交事務,數據庫才能插入成功)
            //方式一:關閉資源前添加提交事務(sqlSession.commit();)
            //方式二:在建立sqlSession時事務參數設置爲true
        sqlSession.commit();
        sqlSession.close();
        in.close();
    }
    //添加操做
    @Test
    public void saveTest(){
        //建立user對象
        User user = new User();
        user.setUserName("張三");
        user.setUserAddress("北京海淀區");
        user.setUserSex("男");
        user.setUserBirthday(new Date());
        //執行添加操做
        dao.saveUser(user);
    }
    //修改操做
    @Test
    public void updateTest(){
        //建立user對象
        User user = new User();
        user.setUserId(50);
        user.setUserName("李四");
        user.setUserAddress("上海長虹區");
        user.setUserSex("女");
        user.setUserBirthday(new Date());
        //執行添加操做
        dao.updateUser(user);
    }
    //刪除操做
    @Test
    public void deleteTest(){
        //執行刪除操做
        dao.deleteUser(50);
    }
    //根據id查詢一個對象信息
    @Test
    public void selectOneTest(){
        //執行根據id查詢操做
        User user = dao.selectOne(51);
        System.out.println(user);
    }
    //根據姓名模糊查詢對象信息
    @Test
    public void selectByNameTest(){
        //執行模糊查詢操做
          List<User> list = dao.selectByName("%王%");  //方式一
        //List<User> list = dao.selectByName("王");
        for(User users:list){
            System.out.println(users);
        }
    }
    //QueryVo  做爲參數查詢,其實是將對象做爲屬性。將對象包裝起來做爲查詢條件
    @Test
    public void findUserByVoTest(){
        User user = new User();
        user.setUserName("王五");
        QueryVo vo = new QueryVo();
        vo.setUser(user);
        //執行按照query條件查詢操做
         List<User> list = dao.selectByName("%王%");
        for(User users:list){
            System.out.println(users);
        }
    }
    //查詢全部信息
    public void findAllTest(){
        List<User> list = dao.findAll();
        for (User users : list) {
            System.out.println(users);
        }
    }
}
複製代碼

到此就介紹完如何使用經過搭建mybatis環境完成CRUD操做了,驚不驚喜,意不意外,就是這麼簡單,用起來真的很爽!!!


寫在最後

推薦做者的Github地址:github.com/Lmobject

感謝您的支持與鼓勵,望能獲得您的關注與點贊,寫博客容易,堅持不易!!!加油。。。
複製代碼
相關文章
相關標籤/搜索