mybatis优化

mybatis的一些优化

1.1

可以把数据源的信息抽取到properties文件中。方便后期修改维护

mybatis优化_第1张图片

创建一个属性文件内容如下

其中URL对于本地数据库名是localhost:3306的可以用如图中的方式进行配置,否则是什么仍然写什么

mybatis优化_第2张图片

再配置文件中引入属性文件

mybatis优化_第3张图片

1.2 添加日志信息—打印sql语句。

(1)引入日志jar文件

mybatis优化_第4张图片

(2)创建日志的配置文件 log4j.properties

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

(3)测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WILeAJIP-1616396325659)(assets\1616220721219.png)]

1.3.1 为实体类起别名(不建议使用)

(1)在mybatis配置文件中设置别名

mybatis优化_第5张图片

(2)在映射文件文件中使用别名

mybatis优化_第6张图片


1.3.2

方法中的参数赋值或者sql语句中的参数赋值方式请见如图内容;<二中方式选择其一>

(1)mapper中的sql设置,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-poFDXuC4-1616396325667)(C:\Users\Administrator\Desktop\AAA\2老师每天发的课件\mysql\mybatis\mybatis优化\mybatis优化.assets\image-20210322143103529.png)]

Dao中这样写[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A84BJRFb-1616396325668)(C:\Users\Administrator\Desktop\AAA\2老师每天发的课件\mysql\mybatis\mybatis优化\mybatis优化.assets\image-20210322143654605.png)]

(2)Dao中的方法参数进行设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-brQuDKtc-1616396325669)(C:\Users\Administrator\Desktop\AAA\2老师每天发的课件\mysql\mybatis\mybatis优化\mybatis优化.assets\image-20210322143734660.png)]

此时的mapper.xml中可以这样写

mybatis优化_第7张图片

1.4 实体类中的属性和数据库表的字段不一致

(1)为查询的结果起别名-----与属性名一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ys4tq0z2-1616396325672)(assets\1616221779906.png)]

(2)使用resultMap来创建属性与字段的映射关系

mybatis优化_第8张图片

**注意**下面对数据类型设置顺序也不能变
《单一属性-->实体类对象association-->实体类集合对象collection》否则resultmap标签会报错
-----------------------------------------------------------------------------------------
相关内容属性含义如下;

    <resultMap id="ClazzMap" type="Clazz">

        <id column="c_id" property="cid"/>
        <result column="c_name" property="cname"/>
        
        <association property="teacher" javaType="Teacher">
            
            <id column="t_id" property="tid"/>
            <result column="t_name" property="tname"/>
        association>
        
          <collection property="students" ofType="Student">
              <id column="s_id" property="sId"/>
              <result column="s_name" property="sname"/>
          collection>
    resultMap>

1.5mybatis联表查询

一对一、多对一等无实例化理解欢迎参考https://blog.csdn.net/u013144287/article/details/79024130

1.5.1 一对一

(1)表与表之间的关系------->外键【从实际情况出发使用逻辑外键关联】

CREATE TABLE teacher(
t_id INT PRIMARY KEY AUTO_INCREMENT,
t_name VARCHAR(20)
);

//teacher     class  一ge老师对多班
CREATE TABLE class(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
teacher_id INT  -- 外键
);
ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id)
REFERENCES teacher(t_id); 
INSERT INTO teacher(t_name) VALUES('LS1');
INSERT INTO teacher(t_name) VALUES('LS2');
INSERT INTO class(c_name, teacher_id) VALUES('bj_a', 1);
INSERT INTO class(c_name, teacher_id) VALUES('bj_b', 2);

(2)java实体类如何维持这种一对多或多对一的关系。

Teacher {tid, tname}

Class {cid,cname,Teacher teacher}---->class 只包含老师id号。 多对一 可以在多(班级)的实体中添加一(教师)的实体类对象。

(1)要求根据班级号 查询班级信息并带上老师的信息。

1.5.1.1 创建对应的实体类

mybatis优化_第9张图片

1.5.1.2 映射文件

mybatis优化_第10张图片

两次查指将第一次查询的结果中某个值作为第二次查询的条件值

通过两次查询得到相应的结果

mybatis优化_第11张图片

  
          <association property="teacher" javaType="Teacher" column="teacher_id" select="findTeacherById">
              <id column="t_id" property="tid"/>
              <result column="t_name" property="tname"/>
          association>
      resultMap>
      <select id="findClazzById" resultMap="ClazzMap">
            select * from class where c_id=#{cid}
      select>

      <select id="findTeacherById" resultType="Teacher">
            select t_id tid,t_name tname from teacher where t_id=#{tid}
      select>

1.5.2 一对多

CREATE TABLE student(
s_id INT PRIMARY KEY AUTO_INCREMENT,
s_name VARCHAR(20),
class_id INT
);
INSERT INTO student(s_name, class_id) VALUES('xs_A', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_B', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_C', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_D', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_E', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_F', 2);

一对多指一个班级对应多个学生,这里指的是

要求 根据班级id查询班级信息以及该班级下所有的学生信息。

mybatis优化_第12张图片

mybatis优化_第13张图片

注意

在mapper.xml文件中的sql标签中写sql语句,例如标签,只能出现一个sql语句,不能出现两个,尤其存在赋值的情况,否则会出现参数数量溢出错误,即使另一个sql语句被注掉也不行,应该是后台程序执行也将其编译了,可以从所报的日志信息里面看到,被注掉的sql语句也出现了
在这里插入图片描述
mybatis优化_第14张图片

xml 碰到特殊字符如何处理:

(1)常见的转移字符;

mybatis优化_第15张图片

(2)使用CDATA 让您随心所欲不再考虑特殊字符写sql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97TXg1GQ-1616396325685)(assets\1616230638420.png)]

你可能感兴趣的:(mybatis-数据库,java)