MyBatis - 环境配置

  1. 一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射

  2. 免除了几乎所有JDBC代码以及设置参数和获取结果集的工作(JDBC的封装)

  3. 可通过简单的XML或注解配置和映射原始类型、接口和Java POJO(Plain Old Java Objects,普通老式Java对象)操作数据库

环境搭建

  1. 引入MyBatis和JDBC依赖

  2. 编写对应实体类和数据库信息

  3. 编写dao层接口

    public interface UserDao {
        // 查询所有用户信息
        List<User> selUser();
    }

  4. dao层内配置与接口相关的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标签:一个接口对应一个mapper-->
    <!--namespace(指定接口位置(全类名))-->
    <mapper namespace="com.xxx.dao.UserDao">
        <!--不同功能标签封装不同操作(对应接口)-->
        <!--select:查询-->
        <!--update:更新-->
        <!--delete:删除-->
        <!--insert:插入-->
        <!--对接口中每一个抽象方法编写对应操作-->
        <!--id属性:绑定对应接口方法名-->
        <!--resultType:指定对应接口的实体类-->
        <select id="selUser" resultType="com.xxx.dao.modle.User">
            <!--接口要执行的SQL语句放在标签中-->
            SELECT * FROM user;
        </select>
    </mapper>

  5. 在src文件下配置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>
        <!-- environments:数据库环境(可配置多个) -->
        <!-- default:指定环境(根据environment的id属性) -->
        <environments default="development">
            <!-- environment:环境(可配置多个) -->
            <!-- id:环境命名 -->
            <environment id="development">
                <transactionManager type="JDBC"/>
                <!-- dataSource:数据源 -->
                <dataSource type="POOLED">
                    <!-- property:数据库连接信息 -->
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url"
                              value="jdbc:mysql://localhost:3306/user?useUnicode=true&amp;characterEncoding=UTF8&amp;serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <!-- mappers:映射器 -->
        <mappers>
            <!-- mapper:接口对应的配置文件 -->
            <!-- resource:.xml资源路径 -->
            <mapper resource="com/xxx/dao/UserDao.xml"/>
        </mappers>
    </configuration>

  6. 应用MyBatis

    public static void main(String[] args) throws Exception {
        // 默认在src下读取文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 工厂模式:解析InputStream,生产sqlSession对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // SqlSession对象:放所有myBaits生成的DAO层接口的实现
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 获取指定的接口实现
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        // 多态调用方法
        List<User> users = userDao.selUser();
        for (User user : users) {
        System.out.println(user);
        }
        // 更新类需要提交事务(sqlSession.commit();)
        // sqlSessoin是个资源,使用完毕后必须进行关闭
        sqlSession.close();
    }

映射器(mappers)

注册mapper的配置文件(对应Dao接口的XML配置文件)

<configuration>
    <mappers>
        <!-- 1、资源路径(resource):/分割 -->
        <mapper resource="com/xxx/dao/UserDao.xml"/>
        <!-- 2、类路径(class):.分割 -->
        <mapper class="com.xxx.dao.UserDao"/>
        <!-- 3、扫描包:引入dao层所有XML文件 -->
        <package name="com.xxx.dao"/>
    </mappers>
</configuration>

属性(properties)

可以引入外部的properties文件

  1. 外部建立properties文件

    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/user?useUnicode=true&amp;characterEncoding=UTF8
    username=root
    password=123456

  2. properties:引入properties文件(mybatis-config.xml)

    <configuration>
        <!-- 默认在src下找文件 -->
        <properties resource="db.properties"></properties>
    </configuration>

  3. 通过${K}取值(mybatis-config.xml)

    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>

类型别名(typeAliases)

实体类取别名后,可直接使用别名(mybatis-config.xml)

<!-- typeAlias:对类取别名、type:java类型 (全类名)alias:别名(随意取)-->
<typeAliases>
    <typeAlias type="com.xxx.dao.modle.User" alias="user"/>
</typeAliases>
<!-- 扫包式:包中所有的实体类别名为驼峰式 -->
<typeAliases>
    <package name="com.xxx.dao.modle"/>
</typeAliases>

拓展

使用标签自定义别名(不常用)

// 手动自定义别名
@Alias("user") 
public class User {
    private Integer id;
    private String name;
}

其他配置

开启日志

记录系统运行过程(mybatis-config.xml)

<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

开启第三日志

1、引入log4j依赖(log4j.jar)

2、在全局配置文件中开启log4j的日志

<configuration>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
</configuration>

3、src中引入log4j配置文件(log4j.properties)

### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制台 ###
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 = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=D://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
### 输出ERROR 级别以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

映射(mapping)

将数据库中的表中记录转为(映射)java实体类的对象

自动映射

MyBatis自动将表中数据转为JAVA实体类对象

前提:(数据库)字段名与(实体类)属性名一致

方案一

SQL语句中为提取字段取别名

public class User {
    private Integer uId;
    private String uName;
    private String uAge;
}
<select id="getAllStudent" resultType="student">
    <!-- 为提取字段取别名 -->
    SELECT u_id uId,u_name uName,u_age uAge FROM user;
</select>

方案二

setting:开启驼峰命名转换

<configuration>
    <settings>
        <!-- 例:u_id(数据库) == uId(实体类) -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

方案三

手动映射(对应接口的xml - mapper标签下)

<!--type:绑定实体类对象-->
<!--id:自定义resultMap -->
<resultMap type="user" id="myuser">
    <!--id:指定主键映射规则-->
    <!--column:指定(数据库)字段列-->
    <!--property:指定(实体类)属性对象-->
    <id column="u_id" property="uId"/>
    <!--result:指定非主键映射规则-->
    <!--column:指定(数据库)字段列-->
    <!--property:指定(实体类)属性对象-->
    <result column="u_name" property="uName"/>
</resultMap>

查询语句中通过resultMap属性引入手动映射自定义id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值