MyBatis 配置模板

MyBatis 配置模板

pom.xml 文件配置

Maven 依赖

<!-- 导入依赖 -->
<dependencies>
    <!-- mysql驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>

    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>

    <!-- junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    
</dependencies>

静态资源过滤问题

<!--在 build 中配置resources,来防止资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

核心配置文件 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 核心配置文件 -->
<configuration>
    
    <!--引入外部配置文件-->
    <properties resource="db.properties">
    	<!--<property name="username" value="root"/>-->
    	<!--<property name="password" value="root"/>-->
	</properties>
    
    <settings>
        <!--标准的日志工厂实现-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--<setting name="logImpl" value="LOG4J"/>-->
        <!--下划线驼峰自动转换-->
    	<setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--显式的开启全局缓存-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
    
    <!--给实体类起别名-->
	<typeAliases>
    	<!--<typeAlias type="com.song.pojo.User" alias="User"/>-->
        <package name="com.song.pojo"/>
	</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>
        
        <environment id="test">
            <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>

    <!-- 每一个 Mapper.XML 都需要在 Mybatis 核心配置文件中注册!!-->
    <mappers>
        <mapper resource="com/song/dao/UserMapper.xml"/>
        <!--<mapper class="com.song.dao.UserMapper"/>-->
        <!--<package name="com.song.dao"/>-->
    </mappers>
</configuration>

数据库配置文件

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

MyBatis 工具类 MybatisUtils

// SqlSessionFactory --> sqlSession
public class MybatisUtils {

    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 的实例。
    public static SqlSession getSqlSession(){
//        SqlSession sqlSession = sqlSessionFactory.openSession();
//        return sqlSession;
        return sqlSessionFactory.openSession();
        // 使用注解时,要打开自动提交
        // return sqlSessionFactory.openSession(true);
    }
}

实体类的配置文件 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">

<!--namespace = 绑定一个对应的 Dao/Mapper 接口-->
<mapper namespace="com.song.dao.UserDao">
    
    <!--第三方缓存,需要导入资源配置文件-->
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    <!--在当前 Mapper.xml 中使用二级缓存-->
    <!--<cache/>-->
    <!--<cache eviction="FIFO"-->
           <!--flushInterval="60000"-->
           <!--size="512"-->
           <!--readOnly="true"/>-->
    

    <!-- select 查询语句,id 绑定方法名,
    返回结果写全限定类名,因为配置文件不会像java类一样会自动找关联,集合都写泛型中的类-->
    <select id="getUserList" resultType="com.song.pojo.User">
        select * from mybatis.user
    </select>
    
    <!--注意:增删改需要提交事务-->
    <insert>......</insert>
    <update>......</update>       
    <delete>......</delete>

    
    <!--引用 resultMap 属性,其中 UserMap 是自己起的名字,不用 resultType 属性-->
    <select id="getUserById" resultMap="UserMap">
        select * from mybatis.user where id = #{id}
    </select>
    
    <!--结果集映射,id 和下面 select 标签中 resultMap 的值对应,type 为映射成的类型-->
    <resultMap id="UserMap" type="User">
        <!-- column 数据库中的字段, property 实体类中的属性-->
        <!-- <result column="id" property="id"/> -->
        <!-- <result column="name" property="name"/> -->
        <result column="pwd" property="password"/>
        <!--复杂的属性需要单独处理   
			对象:association 
			集合:collection 
		-->
        <!-- <association property="" .../> -->
        <!-- <collection property="" .../>-->
    </resultMap>
    
    
</mapper>

注解

@Param
@select()
@update()
@Insert()
@delete()

注意:

  • 在工具类 MybatisUtils.class 创建的时候实现自动提交事务。
  • 必须先将接口注册绑定(通过class)到 MyBatis 的核心配置文件中(如果有多个接口,每个接口都要绑定)。

测试类

@Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        
        User user = mapper.getUserById(1);
        System.out.println(user);

        sqlSession.close();
    }

Lombok 插件

注意:IDEA 中要先导入 Lombok 插件

Maven 依赖

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>

常见注解:

@Data   无参构造 getter setter tostring hashcode equals
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor 有参构造 无参构造
@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@val
posted @ 2020-06-20 21:08  Song-zw  阅读(729)  评论(0编辑  收藏  举报