ssm框架:配置文件的。最好的方式:看官方文档
如何获取MyBatis ?
org.mybatis mybatis 3.5.6
数据持久化.
为什么需要需要持久化?.
Dao层,Service层,Controller层…
最重要的一点:学习使用的人多
思路:搭建环境–》导入Mybatis–>编写代码–》测试!
搭建数据库
CREATE DATABASE mybatis;
USE ‘mybatis;
CREATE TABLE user’ (
id’ INT(20) NOT NULL PRIMARY KEY,
name VARCHAR (30) DEFAULT NULL,
pwd’ VARCHAR (30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO user (id’, name, pwd) VALUES(1,'王五,‘123456’),(2.‘张三’,‘123456’),(3,‘李四’,‘123890’)
新建项目
1.新建一个maven普通项目
2.删除src目录
3.导入maven依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 环境:配置mybatis的环境 -->
<environments default="development">
<!-- 环境变量:可以配置多个环境变量,比如使用多数据源时,就需要配置多个环境变量 -->
<environment id="development">
<!-- 事务管理器 -->
<transactionManager type="JDBC"/>
<!-- 数据源 -->
<dataSource type="">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="111111"/>
</dataSource>
</environment>
</environments>
package com.syj.utils;
import org.apache.ibatis.io.Resources
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
package com.syj.entily;
import lombok.*;
@Data
@ToString
public class User {
private int id;
private String name;
private String pwd;
}
package com.syj.dao;
import com.syj.entily.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
}
<?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="com.syj.dao.UserDao">
<select id="getUserList" resultType="com.syj.entily.User">
select * from user
</select>
</mapper>
junit测试
遇到的问题
1.配置文件没有注册
2.绑定接口错误
3.方法名不对
4.返回类型不对
5.Maven导出资源问题
namespace中的包名要和Dao/Mapper接口的包名一致!
选择,查询语句;
1.编写接口
//根据Id查询用户
User getUser(User user)
2.编写对应的Mapper中的Sql语句
<select id="getuserById" parameterType="int" resultType="com. kuang. pojo.user">
select * from mybatis.user where id = #{id}
</select>
3.测试
@Test
public void getuserById(
Sqlsession sqlsession = Mybatisutils.getsqlsession ();
usermapper mapper = sqlSession. getMapper (userMapper.class);
User user = mapper. getuserById (1);
system.out.println (user);
sqlSession.close();
}
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.log4j.properties
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.Threshold = DEBUG org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://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 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://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
不再使用SQL实现分页
Project Lombok是一个java库,它可以自动插入您的编辑器和构建工具,为您的java增添趣味。永远不要再编写另一个getter或equals方法,只要有一个注释,你的类就有了一个功能齐全的构建器。自动化日志变量等等。
使用步骤
1.在idea中安装Lombok插件
2.在项目中导入Lombokjar包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
3.在实体类加上注解即可
@NonNull
@Cleanup
@Getter/@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor/@RequiredArgsConstructor /@AllArgsConstructor
@Data
@Value
@SneakyThrows
@Synchronized
@Log
@Data:无参构造, get, set, tostring, hashcode, equals
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter @Setter
1.导入Lombok
2.新建实体类Teacher,Studnet
3.建立mapper接口
4.建立mapper.xml文件
5.在核心配注册我们的Mapper接口或者文件【方式很 随心选择】
6.测试查询是否成功
实体类
@Data
public class Teacher{
private int id;
privite String name;
}
@Data
public class Student{
private int id;
privite String name;
//学生需要关联一个老师
privite Teacher teacher;
}
比如:一个老师拥有很多学生
对于老师而言,就是一对多
实体类
@Data
public class Student{
private int id;
privite String name;
private int tid;
}
@Data
public class Teacher{
private int id;
privite String name;
//一个老师拥有多个学生
privite List<Student> Students
}
1.关联:association 多对一
2.集合:collection 一对多
3.javaType & ofType
注意点
.保证SQL的可读性,尽量保证通俗易懂
.注意一对多和多对一中,属性名和字段的问题!
.如果问题不好排查错误,可以使用日志,建议使用Log4j
面试高频.
Mysql引擎
.InnoDB底层原理
索引
.索引优化!
什么是动态SQL:动态SQL就是指根据不同的条件生成不同的SQL语句
利用动态SQL这一特性可以彻底摆脱这种痛苦。
所谓的动态SQL, 本质还是SQL语句,只是我们可以在SQL层面,去执行一个逻辑代码
if
where, set, choose , when
有的时候,我们可能会将一些功能的部分抽取出来,方便复用!
1.使用SQL标签抽取公共的部分
2.在需要使用的地方使用Include标签引用即可
注意事项:
1.什么是缓存[Cache ]?
০存在内存中的临时数据。
০将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。
2.为什么使用缓存?
০减少和数据库的交互次数,减少系统开销,提高系统效率。
3.什么样的数据能使用缓存?
০经常查询并且不经常改变的数据。
测试步骤:
1.开启日志!
2.测试在一个Sesion中查询两次相同记录
3.查看日志输出
缓存失效的情况:
1.查询不同的东西
2.增删改操作,可能会改变原来的数据,所以必定会刷新缓存!
3.查询不同的Mapper.xml
4.手动清理缓存!
小结:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.0.0</version>
</dependency>
ehcache.xml
在这里插入代码片
已Redis数据库来做缓存! K-V