MyBatis 框架

Java常用方法   2025-01-11 18:27   181   0  

一、数据库表结构

test表有两个字段,id为自增主键。
image.png

二、基于 maven 的 Java 工程

1、pom.xml 依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>MyBatis</artifactId>
    <name>MyBatis</name>
    <version>1.0</version>
    <groupId>chenwc</groupId>
    <packaging>jar</packaging>
    <properties>
        <java.version>1.8</java.version>
        <slf4j.version>1.7.36</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <mybatis.version>3.5.11</mybatis.version>
        <mysql-connector-java.version>8.0.30</mysql-connector-java.version>
        <maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector-java.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-reload4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
            </plugin>
        </plugins>
    </build>
</project>

2、创建 Mybatis 的配置文件

存放位置:src/main/resources

<?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>

    <settings>
        <!-- 打印查询语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <!-- 和Spring整合后environment配置都会被干掉 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理,目前由mybatis来管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池,目前由mybatis来管理 -->
            <dataSource type="POOLED">
                <!--有关于mysql数据库的各种信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/ueditorminio?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;allowPublicKeyRetrieval=true" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--在maven项目中会默认读取src/main/resources/mapper目录下的文件,其他目录需要单独设置路径-->
        <!--在Eclipse的java项目中,会读取mapper包下的文件-->
        <!--将操作配置文件TestMapper.xml系添加进mapper-->
        <mapper resource="mapper/TestMapper.xml"/>
    </mappers>
</configuration>

3、创建获取 sqlsession 的工具类

package com.chenwc.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;

/**
* 获取 sqlsession 的工具类
* @author chenwc 
*/
public class MybatisSessionUtil {

    public static SqlSession getSession() {
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        try {
            //在maven项目中getResourceAsStream会默认读取src/main/resources目录下的文件,其他目录需要单独设置路径
            return sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("SqlMapConfig.xml")).openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

4、创建数据库表的实体类

package com.chenwc.entity;

import java.io.Serializable;

/**
 * 数据库表 test 的实体类
 * @author chenwc 
 */
public class Test implements Serializable {
    private String id;
    private String uuid;

    public String getId() {
        return id;
    }

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

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
}

5、创建实体类对应的 mapper 映射 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不需要是完全的类名 -->
<mapper namespace="TestMapper">

    <!-- 通过id查询是否存在 -->
    <select id="countById" parameterType="java.lang.String" resultType="int">
        select count(*)  from test where id = ${id}
    </select>
    <!--如果不想使用实体类,resultType可以设置成Map-->
    <select id="getById" parameterType="java.lang.String" resultType="com.chenwc.entity.Test">
        select * from test where id = ${id}
    </select>
    <select id="getByIdParameterByMap" parameterType="java.util.Map" resultType="com.chenwc.entity.Test">
        select * from test where id = #{id}
    </select>
    <!--如果不想使用实体类,resultType可以设置成Map-->
    <select id="selectAll" resultType="java.util.Map">
        select * from test
    </select>
    <select id="selectAllByEntity" resultType="com.chenwc.entity.Test">
        select * from test
    </select>
</mapper>

6、创建 mapper 映射的 Dao 类

package com.chenwc.dao;

import com.chenwc.entity.Test;
import org.apache.ibatis.session.SqlSession;

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

/**
 * Dao层
 * @author chenwc 
 */
public class TestDao {

    public static int countById(String id, SqlSession session){
        // 第一个参数是mapper.xml里的namespace+MappedStatement对应的id
        int rint = session.selectOne("TestMapper.countById", id);
        // 不要忘记提交,SqlSession默认不自动提交
        session.commit();
        return rint;
    }

    public static Test getById(String id, SqlSession session){
        //如果不想使用实体类,查询结果可以使用Map<String, Object>,类型需要和mapper文件中一致
        Test test = session.selectOne("TestMapper.getById", id);
        session.commit();
        return test;
    }
    public static Test getByIdParameterByMap(String id, SqlSession session){
        //如果不想使用实体类,查询结果可以使用Map<String, Object>,类型需要和mapper文件中一致
        Map<String, String> idMap = new HashMap<>();
        idMap.put("id", id);
        Test test = session.selectOne("TestMapper.getByIdParameterByMap", idMap);
        session.commit();
        return test;
    }

    public static List<Map<String, Object>> selectAll(SqlSession session){
        //如果不想使用实体类,查询结果可以使用List<Map<String, Object>>,类型需要和mapper文件中一致
        List<Map<String, Object>> list = session.selectList("TestMapper.selectAll");
        session.commit();
        return list;
    }

    public static List<Test> selectAllByEntity(SqlSession session){
        //如果不想使用实体类,查询结果可以使用List<Map<String, Object>>,类型需要和mapper文件中一致
        List<Test> list = session.selectList("TestMapper.selectAllByEntity");
        session.commit();
        return list;
    }
}

7、项目目录结构

image.png

8、测试

package com.chenwc;

import com.chenwc.dao.TestDao;
import com.chenwc.entity.Test;
import com.chenwc.util.MybatisSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;

/**
 * 测试
 * @author chenwc
 */
public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args){
        SqlSession session = MybatisSessionUtil.getSession();
        if (null == session){
            return;
        }
        Test data = TestDao.getById("360881597623000", session);
        Test data2 = TestDao.getByIdParameterByMap("360881597623000", session);
        int count = TestDao.countById("360881597666500", session);
        List<Map<String, Object>> list = TestDao.selectAll(session);
        List<Test> list2 = TestDao.selectAllByEntity(session);
        log.info(String.valueOf(count));
        log.info(data.getId());
        log.info(data.getUuid());
        log.info(list.toString());
        try {
            session.clearCache();
            session.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

image.png

9、log4j.properties

log4j.rootLogger=info,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %-5L --- [%-5t] %-10c : %m %n

三、基于 Eclipse 的 Java 工程

1、依赖

mysql-connector-java-8.0.30.jar
mybatis-3.5.11.jar
slf4j-api-1.7.36.jar
log4j-1.2.17.jar
slf4j-log4j12-1.7.7.jar

2、创建 Mybatis 的配置文件

存放位置:src,这个存放位置和 maven 项目的位置不同

<?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>

    <settings>
        <!-- 打印查询语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <!-- 和Spring整合后environment配置都会被干掉 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理,目前由mybatis来管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池,目前由mybatis来管理 -->
            <dataSource type="POOLED">
                <!--有关于mysql数据库的各种信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/ueditorminio?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;allowPublicKeyRetrieval=true" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--在maven项目中会默认读取src/main/resources/mapper目录下的文件,其他目录需要单独设置路径-->
        <!--在Eclipse的java项目中,会读取mapper包下的文件-->
        <!--将操作配置文件TestMapper.xml系添加进mapper-->
        <mapper resource="mapper/TestMapper.xml"/>
    </mappers>
</configuration>

3、创建获取 sqlsession 的工具类

package com.chenwc.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;

/**
* 获取 sqlsession 的工具类
* @author chenwc 
*/
public class MybatisSessionUtil {

    public static SqlSession getSession() {
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        try {
            //在maven项目中getResourceAsStream会默认读取src/main/resources目录下的文件,其他目录需要单独设置路径
            return sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("SqlMapConfig.xml")).openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

4、创建数据库表的实体类

package com.chenwc.entity;

import java.io.Serializable;

/**
 * 数据库表 test 的实体类
 * @author chenwc 
 */
public class Test implements Serializable {
    private String id;
    private String uuid;

    public String getId() {
        return id;
    }

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

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
}

5、创建实体类对应的 mapper 映射 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不需要是完全的类名 -->
<mapper namespace="TestMapper">

    <!-- 通过id查询是否存在 -->
    <select id="countById" parameterType="java.lang.String" resultType="int">
        select count(*)  from test where id = ${id}
    </select>
    <!--如果不想使用实体类,resultType可以设置成Map-->
    <select id="getById" parameterType="java.lang.String" resultType="com.chenwc.entity.Test">
        select * from test where id = ${id}
    </select>
    <select id="getByIdParameterByMap" parameterType="java.util.Map" resultType="com.chenwc.entity.Test">
        select * from test where id = #{id}
    </select>
    <!--如果不想使用实体类,resultType可以设置成Map-->
    <select id="selectAll" resultType="java.util.Map">
        select * from test
    </select>
    <select id="selectAllByEntity" resultType="com.chenwc.entity.Test">
        select * from test
    </select>
</mapper>

6、创建 mapper 映射的 Dao 类

package com.chenwc.dao;

import com.chenwc.entity.Test;
import org.apache.ibatis.session.SqlSession;

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

/**
 * Dao层
 * @author chenwc 
 */
public class TestDao {

    public static int countById(String id, SqlSession session){
        // 第一个参数是mapper.xml里的namespace+MappedStatement对应的id
        int rint = session.selectOne("TestMapper.countById", id);
        // 不要忘记提交,SqlSession默认不自动提交
        session.commit();
        return rint;
    }

    public static Test getById(String id, SqlSession session){
        //如果不想使用实体类,查询结果可以使用Map<String, Object>,类型需要和mapper文件中一致
        Test test = session.selectOne("TestMapper.getById", id);
        session.commit();
        return test;
    }
    public static Test getByIdParameterByMap(String id, SqlSession session){
        //如果不想使用实体类,查询结果可以使用Map<String, Object>,类型需要和mapper文件中一致
        Map<String, String> idMap = new HashMap<>();
        idMap.put("id", id);
        Test test = session.selectOne("TestMapper.getByIdParameterByMap", idMap);
        session.commit();
        return test;
    }

    public static List<Map<String, Object>> selectAll(SqlSession session){
        //如果不想使用实体类,查询结果可以使用List<Map<String, Object>>,类型需要和mapper文件中一致
        List<Map<String, Object>> list = session.selectList("TestMapper.selectAll");
        session.commit();
        return list;
    }

    public static List<Test> selectAllByEntity(SqlSession session){
        //如果不想使用实体类,查询结果可以使用List<Map<String, Object>>,类型需要和mapper文件中一致
        List<Test> list = session.selectList("TestMapper.selectAllByEntity");
        session.commit();
        return list;
    }
}

7、项目目录结构

image.png

8、测试

package com.chenwc;

import com.chenwc.dao.TestDao;
import com.chenwc.entity.Test;
import com.chenwc.util.MybatisSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;

/**
 * 测试
 * @author chenwc
 */
public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args){
        SqlSession session = MybatisSessionUtil.getSession();
        if (null == session){
            return;
        }
        //Test data = TestDao.getById("360881597623000", session);
        Test data2 = TestDao.getByIdParameterByMap("360881597623000", session);
        int count = TestDao.countById("360881597666500", session);
        //List<Map<String, Object>> list = TestDao.selectAll(session);
        //List<Test> list2 = TestDao.selectAllByEntity(session);
        log.info(String.valueOf(count));
        //log.info(data.getId());
        log.info(data2.getUuid());
        //log.info(list.toString());
        try {
            session.clearCache();
            session.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

image.png

9、log4j.properties

log4j.rootLogger=info,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %-5L --- [%-5t] %-10c : %m %n


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。