• MyBatis - 环境配置


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

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

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

    环境搭建

    1. 引入MyBatis和JDBC依赖

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

    3. 编写dao层接口

      1. public interface UserDao {
      2. // 查询所有用户信息
      3.    List<User> selUser();
      4. }
    4. dao层内配置与接口相关的xml文件(命名与接口名一致)

      1. <?xml version="1.0" encoding="UTF-8" ?>
      2. <!DOCTYPE mapper
      3.        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      4.        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      5. <!--mapper标签:一个接口对应一个mapper-->
      6. <!--namespace(指定接口位置(全类名))-->
      7. <mapper namespace="com.xxx.dao.UserDao">
      8.    <!--不同功能标签封装不同操作(对应接口)-->
      9.    <!--select:查询-->
      10.    <!--update:更新-->
      11.    <!--delete:删除-->
      12.    <!--insert:插入-->
      13.    <!--对接口中每一个抽象方法编写对应操作-->
      14.    <!--id属性:绑定对应接口方法名-->
      15.    <!--resultType:指定对应接口的实体类-->
      16.    <select id="selUser" resultType="com.xxx.dao.modle.User">
      17.        <!--接口要执行的SQL语句放在标签中-->
      18.       SELECT * FROM user;
      19.    </select>
      20. </mapper>
    5. 在src文件下配置xml全局配置文件

      1. <?xml version="1.0" encoding="UTF-8"?>
      2. <!DOCTYPE configuration
      3.        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      4.        "http://mybatis.org/dtd/mybatis-3-config.dtd">
      5. <configuration>
      6.    <!-- environments:数据库环境(可配置多个) -->
      7.    <!-- default:指定环境(根据environment的id属性) -->
      8.    <environments default="development">
      9.        <!-- environment:环境(可配置多个) -->
      10.        <!-- id:环境命名 -->
      11.        <environment id="development">
      12.            <transactionManager type="JDBC"/>
      13.            <!-- dataSource:数据源 -->
      14.            <dataSource type="POOLED">
      15.                <!-- property:数据库连接信息 -->
      16.                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
      17.                <property name="url"
      18.                          value="jdbc:mysql://localhost:3306/user?useUnicode=true&amp;characterEncoding=UTF8&amp;serverTimezone=UTC"/>
      19.                <property name="username" value="root"/>
      20.                <property name="password" value="123456"/>
      21.            </dataSource>
      22.        </environment>
      23.    </environments>
      24.    <mappers>
      25.        <!-- mapper:接口对应的配置文件 -->
      26.        <!-- resource:.xml资源路径 -->
      27.        <mapper resource="com/xxx/dao/UserDao.xml"/>
      28.    </mappers>
      29. </configuration>
    6. 应用MyBatis

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

      @Param

    接口(删除指定用户)

    1. // @Param:对参数取别名
    2. Integer deleteUser(@Param("id")Integer id);

    接口对应的xml配置

    1. <delete id="deleteUser">
    2.    <!-- XML配置通过#{"别名"}在SQL语句上取值 -->
    3.   DELETE FROM user WHERE uid = #{id}
    4. </delete>

    映射器(mappers)

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

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

    属性(properties)

    可以引入外部的properties文件

    1. 外部建立properties文件

      1. driver=com.mysql.cj.jdbc.Driver
      2. url=jdbc:mysql://localhost:3306/user?useUnicode=true&amp;characterEncoding=UTF8
      3. username=root
      4. password=123456
    2. properties:引入properties文件(mybatis-config.xml)

      1. <configuration>
      2.    <!-- 默认在src下找文件 -->
      3.    <properties resource="db.properties"></properties>
      4. </configuration>
    3. 通过${K}取值(mybatis-config.xml)

      1. <property name="driver" value="${driver}"/>
      2. <property name="url" value="${url}"/>
      3. <property name="username" value="${username}"/>
      4. <property name="password" value="${password}"/>

    类型别名(typeAliases)

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

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

    拓展

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

    1. // 手动自定义别名
    2. @Alias("user")
    3. public class User {
    4. private Integer id;
    5. private String name;
    6. }

    其他配置

    开启日志

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

    1. <configuration>
    2.    <settings>
    3.        <setting name="logImpl" value="STDOUT_LOGGING"/>
    4.    </settings>
    5. </configuration>

    开启第三日志

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

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

    1. <configuration>
    2. <settings>
    3. <setting name="logImpl" value="LOG4J"/>
    4. </settings>
    5. </configuration>

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

    1. ### 设置###
    2. log4j.rootLogger = debug,stdout,D,E
    3. ### 输出信息到控制台 ###
    4. log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    5. log4j.appender.stdout.Target = System.out
    6. log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    7. log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    8. ### 输出DEBUG 级别以上的日志到=D://logs/error.log ###
    9. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    10. log4j.appender.D.File = D://logs/log.log
    11. log4j.appender.D.Append = true
    12. log4j.appender.D.Threshold = DEBUG
    13. log4j.appender.D.layout = org.apache.log4j.PatternLayout
    14. log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
    15. ### 输出ERROR 级别以上的日志到=D://logs/error.log ###
    16. log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    17. log4j.appender.E.File =D://logs/error.log
    18. log4j.appender.E.Append = true
    19. log4j.appender.E.Threshold = ERROR
    20. log4j.appender.E.layout = org.apache.log4j.PatternLayout
    21. log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

    映射(mapping)

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

    自动映射

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

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

    方案一

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

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

    方案二

    setting:开启驼峰命名转换

    1. <configuration>
    2.    <settings>
    3.        <!-- 例:u_id(数据库) == uId(实体类) -->
    4.        <setting name="mapUnderscoreToCamelCase" value="true"/>
    5.    </settings>
    6. </configuration>

    方案三

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

    1. <resultMap type="user" id="myuser">
    2.    <!--id:指定主键映射规则-->
    3.    <!--column:指定(数据库)字段列-->
    4.    <!--property:指定(实体类)属性对象-->
    5.    <id column="u_id" property="uId"/>
    6.    <!--result:指定非主键映射规则-->
    7.    <!--column:指定(数据库)字段列-->
    8.    <!--property:指定(实体类)属性对象-->
    9.    <result column="u_name" property="uName"/>
    10. </resultMap>

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

    1. <!--id属性:绑定对应接口方法名-->
    2. <!--resultMap:指定resultMap自定义id-->
    3. <select id="AllUser" resultMap="myuser">
    4.   SELECT * FROM student;
    5. </select>
  • 相关阅读:
    Linux入门教程:P15->软件包管理
    [极致用户体验] 微信设置大字号后,iOS加载网页时闪动怎么办?
    无代码开发重新指派负责人入门教程
    Kyligence 副总裁周涛:创新数据能力,驱动银行业数字化转型|爱分析活动
    《计算机体系结构量化研究方法第六版》1.2 计算机的分类
    【APP源码】基于Typecho博客程序开发的博客社区资讯APP源码
    百战c++(网络)
    【背包问题】第十二届蓝桥杯省赛第一场C++ A组/B组/研究生组《砝码称重》(c++)
    计算机网络之传输层
    从零开始Blazor Server(9)--修改Layout
  • 原文地址:https://blog.csdn.net/Xstruggle/article/details/125402602