IDEA create mybatisDemo, and to achieve a simple CRUD

Mybatis persistence framework is to support outstanding ordinary SQL queries, stored procedures and advanced mappings. In Java or Java Web project, add Mybatis necessary core packages, data tables will be able to carry out the CRUD operations. Oa below to MySQL database data table userinfo example, deletions implemented using Mybatis change search data.

Ready to work

For convenience, I use IDEA + Maven project to solve the package management, configuration methods IDEA Maven, refer to the links , the Demo-use development version is as follows:

  • IDE:IntelliJ IDEA 2019.3.1 x64
  • Maven: apache-stomach-3.3.9

1, the new project

project SDk File-> new-> project, select the left maven, setting items: jdk 1.8, check Create from archetype, maven-archetype-quickstart check list

Then, fill in the project name mybatisDemo, project location, configuration Maven (User settings file and a local repository here are tick Override), finish creating the project, initialize the directory structure is as follows Figure A , run the project directory structure intact following diagram b :

2, the preparation of the project code

Write a configuration file pom.xml, add the following dependencies, and prompt IDE appears, select reimport changes can then start downloading Maven package to the needs of this project.
Jdbc driver version 5.1.18 of this project is used, use a newer version, you need to pay attention to write back mysql.properties profile, the two are different.

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
    </dependencies>

编写实体类 UserInfo.java,同时在MySQL数据库中创建对应的数据表userinfo,如上图c

package org.example;

import java.io.Serializable;

public class UserInfo implements Serializable {
    private int id;
    private String username;
    private String password;

    public UserInfo(){}

    public UserInfo(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

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

在src/main目录下创建java的同级文件夹resource,并右键 Mark Directory as -> Sources Root,在resource下新建mapper包,新建SQL映射的UserInfo.xml文件

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace设置格式:包名+SQL映射文件名-->
<mapper namespace="com.mybatis.mapper.UserInfoMapper">
    <!--根据用户ID查询用户信息-->
    <select id="findUserInfoById" parameterType="int" resultType="UserInfo">
        select * from userinfo where id = #{id}
    </select>

    <!--根据用户名模糊查询用户-->
    <select id="findUserInfoByUserName" parameterType="String" resultType="UserInfo">
        select * from userinfo where username like CONCAT(CONCAT('%',#{username}),'%')
    </select>

    <!--添加用户-->
    <insert id="addUserInfo" parameterType="UserInfo">
        insert into userinfo(id,username,password) values(#{id},#{username},#{password})
    </insert>

    <!--修改用户信息-->
    <update id="updateUserInfo" parameterType="UserInfo">
        update userinfo set password = #{password} where id = #{id}
    </update>

    <!--删除用户信息-->
    <delete id="deleteUserInfo" parameterType="int">
        delete from userinfo where id = #{id}
    </delete>

</mapper>

在resource文件夹下,新建两个属性文件:mysql.propertieslog4j.properties,用于配置MySQL和log4j

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/oa
username=root
password=8636hyh
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug,stdout,logfile

### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n

### 显示SQL语句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

最后,添加mybatis的核心配置文件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="mysql.properties"></properties>
    <!--给包中的类注册别名-->
    <typeAliases>
        <typeAlias type="org.example.UserInfo" alias="UserInfo"/>
    </typeAliases>
    <!--配置环境-->
    <environments default="development">
        <!--配置一个id为development的环境-->
        <environment id="development">
            <!--使用JDBC事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据库连接池-->
            <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- UNPOOLED 表示不支持数据源连接池 -->
            <!-- JNDI 表示支持外部数据源连接池 -->
            <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="mapper/UserInfo.xml"/>
    </mappers>
    <!-- Continue going here -->

</configuration>

3、编写测试文件

编写测试类AppTest.java,使用单元测试来逐项检查“增删改查”功能,只需要在各方法名上右键运行,即可进行测试;
其中注解的含义:在测试类中,每一个用@Test注解修饰的方法称为测试方法,它们的调用顺序为@Before->@Test->@After。因此,每次执行一个单元测试方法,都会先运行init()方法初始化,建立数据库会话,然后运行测试函数,最后调用destroy()释放资源。

package org.example;

import static org.junit.Assert.assertTrue;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLOutput;
import java.util.List;

/**
 * Unit test for simple App.
 */
public class AppTest {
    /**
     * Rigorous Test :-)
     */
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession sqlSession;

    @Before
    public void init() {
        //读取mybatis配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream;
        try {
            //得到配置文件流
            inputStream = Resources.getResourceAsStream(resource);
            //根据配置文件信息,创建会话工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //通过工厂得到Sqlsession
            sqlSession = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //根据id查询用户
    @Test
    public void testFindUserInfoById() {
        //通过sqlSession执行映射文件中定义的SQL,并返回映射结果
        UserInfo ui = sqlSession.selectOne("findUserInfoById", 101);
        //打印输出结果
        System.out.println(ui.toString());
    }

    //根据用户名模糊查询用户
    @Test
    public void testFindUserInfoByUserName() {
        //执行映射文件中定义的SQL,并返回结果集
        List<UserInfo> uis = sqlSession.selectList("findUserInfoByUserName", "ang");
        for (UserInfo ui : uis) {
            System.out.println(ui);
        }
    }

    //添加用户
    @Test
    public void testAddUserInfo() {
        //创建UserInfo对象ui
        UserInfo ui = new UserInfo(104, "xia", "12334");
        int res = sqlSession.insert("addUserInfo", ui);
        if (res > 0) {
            System.out.println("insert successfully!");
        } else {
            System.out.println("insert failed!");
        }
    }

    //修改用户
    @Test
    public void testUpdateUserInfo(){
        //加载编号为103的用户
        UserInfo ui = sqlSession.selectOne("findUserInfoById",103);
        ui.setPassword("13345");
        int res = sqlSession.update("updateUserInfo",ui);
        if(res > 0){
            System.out.println("update successfully!");
        }else{
            System.out.println("update failed!");
        }
    }

    @Test
    public void testDeleteUserInfo(){
        //执行sqlSession的delete方法,返回结果受影响的行数
        int res = sqlSession.delete("deleteUserInfo",102);
        if(res > 0){
            System.out.println("delete successfully!");
        }else{
            System.out.println("delete failed!");
        }
    }

    @After
    public void destroy() {
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.close();
    }
}

4、控制台输出验证

使用用户名模糊查询用户的结果,结果正确。

5、Demo源码https://github.com/sdifv/JavaWebDemo/tree/master/SSM/mybatisDemov

Guess you like

Origin www.cnblogs.com/geekHao/p/12129218.html