Mybatis的整體環境搭建(嘔血總結:絕對細緻)

Mybatis的整體環境搭建(嘔血總結:絕對細緻)

總體佈局:

基礎環境總體佈局

第一步:編寫javabean代碼 :這裏不必贅述

補充:成員變量名最好要與數據庫字段保持一致,如果沒有執行sql語句會執行不順利(有解決辦法,往後看)

public class User {
    private int id;
    private String name;
    private String password;//這裏我沒有和數據庫字段保持一致,我後面用了resultMap做了處理
    
    public User() {
    }
    public User(int id){
        this.id = id;
    }

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

第二步:配置maven環境,導入必需的jar包

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wang</groupId>
    <artifactId>Mybatis_02</artifactId>
    <version>1.0-SNAPSHOT</version>
 <dependencies>
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.17</version>
     </dependency>
     <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.5.2</version>
     </dependency>
     <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.17</version>
     </dependency>
 </dependencies>

    <!--在build中配置resources,來防止我們資源導出失敗的問題-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

第三步:

1.配置核心配置文件 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"/>
    <settings>
        <!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--可以給實體類起別名-->
    <typeAliases>
        <typeAlias type="com.wang.domain.User" alias="User"/>
    </typeAliases>
    <!--<typeAliases>
        <package name="com.wang.domain"/>
    </typeAliases>-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>
    <mappers>
        <mapper resource="com/wang/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

這裏需要特別注意:SAXParseException異常:是因爲我們的定義內容順序不對:應該是properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?的順序

2.創建db.properties 配置文件

這裏我的用戶和密碼都是root (根據自己的修改)

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root

第四步:定義工具類

package com.wang.utils;

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 java.io.IOException;
import java.io.InputStream;

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            //使用mybatis第一步、獲取sqlSessionFactory對象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch(IOException e) {
            e.printStackTrace();
        }
    }

    //既然有了 SqlSessionFactory,顧名思義,我們就可以從中獲得 SqlSession 的實例了。
    // SqlSession 完全包含了面向數據庫執行 SQL 命令所需的所有方法。
    // 你可以通過 SqlSession 實例來直接執行已映射的 SQL 語句。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

第五步:

1.創建功能接口(在這裏我簡單定義了兩個功能)

public interface UserMapper {
    List<User> getUserList();
    User getUserById(int id);
    void insterUser(Map<String,Object> m);
}

2.定義功能接口的實現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.wang.mapper.UserMapper">
    <resultMap id="UserMap" type="User">
        <result column="pwd" property="password"/>
    </resultMap>
    <select id="getUserList" resultType="User">
        select id,name,pwd as password from user
    </select>
    <select id="getUserById" resultMap="UserMap" parameterType="_int">
        select  * from user where id = ${id}
    </select>
    <insert id="insterUser" parameterType="map">
        insert into user (id,name,pwd) values(#{userId},#{userName},#{password})
    </insert>
</mapper>

第六步 : 導入log4j.properties日誌配置文件

log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=./log/wang.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

最後:進行測試

這裏我們習慣將測試類放入和功能接口一樣的包中

package com.wang.mapper;

        import com.wang.domain.User;
        import com.wang.utils.MybatisUtil;
        import org.apache.ibatis.session.SqlSession;
        import org.apache.log4j.Logger;
        import org.junit.Test;

        import java.util.HashMap;
        import java.util.List;


public class MybatisTest {
    static Logger logger = Logger.getLogger(MybatisTest.class);
    @Test
    public void getuserList(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    @Test
    public void getUserById(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        /*logger.info("info:進入了testLog4j方法");
        logger.debug("debug:進入了testLog4j");
        logger.error("error:進入了testLog4j");*/
        User userById = mapper.getUserById(1);
        System.out.println(userById);
        sqlSession.close();
    }
    @Test
    public void insertUser(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        HashMap<String,Object> m = new HashMap<String,Object>();
        m.put("userId",5);
        m.put("userName","王五");
        m.put("password","23333");
        mapper.insterUser(m);
        sqlSession.commit();
        sqlSession.close();
    }
}

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