什么是框架:框架就是别人搭建好的某些功能,你只需要引用该框架并加入自己的业务代码。
好处: 提高我们的开发效率。
mybatis的介绍:
MyBatis 是一款优秀的持久层Dao框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Java实体类)映射成数据库中的记录.
为什么使用mybatis框架
可以简化jdbc的操作以及占位符赋值以及查询结果集的封装。
如何使用mybatis.
引入mybatis和mysql的jar包
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
创建mybatis的配置文件----不需要背---会ctrl+c+v
<?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="development">
<environment id="development">
<transactionManager type="JDBC" />
<!--数据源的配置:name的值固定 value的值要根据客户自己修改-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>
(3)创建数据库和表
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`realname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`userid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES (1, 'admin', '管理员');
INSERT INTO `tb_user` VALUES (2, 'lm', '黎明');
INSERT INTO `tb_user` VALUES (3, 'ldh', '刘德华');
INSERT INTO `tb_user` VALUES (4, 'zxy', '张学友');
INSERT INTO `tb_user` VALUES (5, 'gfc', '郭富城');
4) 创建实体类
public class User {
private int userid;
private String username;
private String realname;
//get和set省略
}
(3) 创建mybatis和数据库的映射文件.----不需要背---会ctrl+c+v---理解并会改
作用: 映射实体和表之间的映射关系。
<?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 namespace="qy151.user">
<!--查询 根据id查询用户信息
select标签用于查询的标签
id:标签的唯一标识
resultType: 定义返回的类型 把sql查询的结果封装到哪个实体类钟
#{id}===表示占位符等价于? 这是mybatis框架的语法
-->
<select id="findById" resultType="com.ykq.entity.User">
select * from tb_user where userid=#{id}
</select>
</mapper>
注意:==把映射文件注册到配置文件上 == mybatis.xml 上
<!--注册映射文件-->
<mappers>
<!--resource:引用资源文中的映射文件 url:网络上的映射文件-->
<mapper resource="mapper/UserMapper.xml" />
</mappers>
(4) 测试mybatis
package com.ykq.test;
import com.ykq.entity.User;
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.Reader;
public class Test01 {
public static void main(String[] args) throws Exception {
//1.读取mybatis配置文件的内容----未来不需要写tomcat 解析配置文件
Reader reader = Resources.getResourceAsReader("mybatis.xml");
//2. 获取SqlSessionFactory对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
//3. 获取SqlSession对象----封装了对数据库操作的各种方法
SqlSession session=factory.openSession();
//调用查询一个结果的接口
//String statement, 命名空间+id----指向sql标签
// Object parameter 需要实参
User user = session.selectOne("qy151.user.findById", 2);
System.out.println(user);
//4.关闭
session.close();
}
}
lombok插件
它可以帮你生成实体类的get和set方法 而且可以帮你生成构造方法。重写toString方法
工程中引入lombok依赖
<!--lombok的依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
在实体类上添加lombok注解。
@Data //set和get方法以及toString方法
@NoArgsConstructor //无参构造方法
@AllArgsConstructor //所有参数的构造方法
public class User {
private int userid;
private String username;
private String realname;
}
使用MyBatis完成增删改查
<!--查询单个-->
<select id="findOne" resultType="User">
select * from t_user where id=#{id}
</select>
<!--添加-->
<insert id="add" parameterType="User">
insert into t_user(name,password) values (#{name},#{password})
</insert>
<!--删除-->
<delete id="delete" parameterType="User">
delete from t_user where id=#{id}
</delete>
<!--修改-->
<update id="update" parameterType="User">
update t_user set name=#{name},password=#{password} where id=#{id}
</update>
<!--查询所有-->
<select id="findAll" resultType="User">
select * from t_user
</select>
<select id="One" resultType="User">
select * from t_user where name=#{name} and password=#{password}
</select>
测试
package com.xzh.test;
import com.mysql.cj.result.SqlDateValueFactory;
import com.xzh.entity.User;
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 org.junit.Test;
import java.io.Reader;
import java.util.List;
public class Test01 {
@Test
public void selectOne() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
Object o = session.selectOne("user.findOne", 1);
System.out.println(o);
session.close();
}
@Test
//添加
public void addOne() throws Exception{
//1.读取mybatis配置文件的内容----未来不需要写tomcat解析配置文件
Reader reader = Resources.getResourceAsReader("mybatis.xml");
//2. 获取SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
//3. 获取SqlSession对象----封装了对数据库操作的各种方法
SqlSession session = factory.openSession();
User user = new User();
user.setName("aaaa");
user.setPassword("021900");
//调用查询一个结果的接口
//String statement, 命名空间+id----指向sql标签
// Object parameter 需要实参
int insert = session.insert("user.add", user);
session.commit();
System.out.println(insert);
session.close();
}
@Test
//删除
public void deleteOne() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
User user = new User();
user.setId(33);
int delete = session.delete("user.delete", user);
session.commit();
System.out.println(delete);
session.close();
}
@Test
//修改
public void update() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
User user = new User();
user.setName("aaaaa");
user.setPassword("11111");
user.setId(26);
int update = session.update("user.update", user);
session.commit();
System.out.println(update);
session.close();
}
@Test
//查询所有
public void selectAll() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis01.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
List<Object> objects = session.selectList("user.findAll");
System.out.println(objects);
session.close();
}
@Test
//查询记录
public void One() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
User user = new User();
user.setName("xzh");
user.setPassword("123456");
Object o = session.selectOne("user.One", user);
System.out.println(o);
session.close();
}
}
mybatis一些优化
8.1 为实体类起别名
添加sql日志
添加日志的jar包
<!--log4f-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
添加日志的文件配置--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