mybatis入门
一 前言
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二 mybatis入门
小白你好啊,在这里你要自己创建maven工程,如果不懂的配置安装可以看我tool系列的idea配置maven;
如果数据库没有学过,可以看我sql系列的教程;在下文 properties里面还隐藏了一个mysql的安装教程,以免你真是个小白啊!!!
2.1 pom.xml
pom 里面就是学习mybatis一些依赖了其中的 junit目前没用到,但是下节课可能就用到啦,苍天饶过谁啊!!!
<dependencies> <!-- mybatis support--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- log4j support --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- junit support --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- mysql support --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.5</version> </dependency> </dependencies>
2.2 log4j.properties
配置log4j.properties是为了更好显示日志信息,能够打印出sql;我们在 resource目录下新建一个 log4j.properties,内容如下,记得替换mapper包的映射路径哟小白;要不然日志打印不出来有你哭的,抱着哥哥的博客和公众号都没软用;
### 设置### log4j.rootLogger = info,stdout ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender ## 这边要替换成你的mapper包映射路径哟 log4j.logger.com.zszxz.mybatis.mapper = debug 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 # mysql安装https://zhuanlan.zhihu.com/p/37152572
2.3 数据库建表
小白在这里使用的mysql5.7版本,建表的信息如下;是一个学生类,主要字段是学生表主键,学生姓名,学生编号,然后我在里面插入了2条记录哟;哥哥为什么要建立学生实体呢,因为学生爱学习,学生最单纯,哥哥把自己永远当作了学生;
CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(255) DEFAULT NULL COMMENT '学生姓名', `number` int(11) DEFAULT NULL COMMENT '学生编号', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `mybatis`.`student`(`id`, `name`, `number`) VALUES (1, '知识追寻者', 996); INSERT INTO `mybatis`.`student`(`id`, `name`, `number`) VALUES (2, 'youku1327', 555);
2.4 学生实体
学生实体是为了查询sql语句将返回的结果映射到实体里面哟!
/** 1. @Author lsc 2. @Description <p> </p> 3. @Date 2019/12/1 20:07 */ public class Student { // id private String id; // 学生姓名 private String name; // 学生编号 private String number; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } }
2.5 mapper
下面的每句话都堪称经典,你如果是异教徒,要像学习圣经一样虔诚对待它:
- StudentMapper.xml 是 一个xml 文件 里面主要是 mybatis 的 DTD ,还有我们写的sql逻辑;
- 注意 这边有个
namespace
属性是跟我们 StudentMapper 接口对应映射路径; - 一个 mapper.xml 对应一个 mapper 接口 别搞混咯,通常他们的名字都一个哟,官方习惯以mapper结尾哟;
- StudentMapper.xml 创建的位置 是在 resource目录的mapper子目录中,如果你真是小白就别自定义哟,会出错的;
- StudentMapper 里面有个方法
getStudent
是跟<select>
标签里面的id 对应,表示 查询方法的唯一标识; resultType
里面就是 学生实体的映射路径,不要填类名,万一报错了,你可找不到我帮你检查了;<select>
标签里面的内容就是我们的sql逻辑咯,哥哥这边做了查询全表的操作;
StudentMapper.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 namespace="com.zszxz.mybatis.mapper.StudentMapper"> <!-- 查询学生--> <select id="getStudent" resultType="com.zszxz.mybatis.entity.Student"> select * from student </select> </mapper>
StudentMapper :
public interface StudentMapper { // 查询学生 List<Student> getStudent(); }
2.6 mybatis-config.xml - 它就是一个配置
mybatis-config.xml 是我们 配置mybatis 的内容都在里面,小白在这里不用知道太多,小说里面有句话很经典啊,知道的越多死的越快啊,你要学杨修么,虽然才华横溢,还不是被曹操咔嚓了!!!!你该知道的我都写里面;这个文件的位置 是放在 resource目录下;
<?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"> <!-- mybaits配置 --> <configuration> <!-- 全局环境配置--> <environments default="development"> <environment id="development"> <!-- 事物 --> <transactionManager type="JDBC"/> <!-- 配置数据源 --> <dataSource type="POOLED"> <!-- 数据库驱动 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <!-- 数据库路径 --> <property name="url" value="jdbc:mysql://192.168.0.106:3306/mybatis"/> <!-- 账号--> <property name="username" value="root"/> <!--密码 --> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 引入自定义mapper.xml --> <mappers> <mapper resource="mapper/StudentMapper.xml"/> </mappers> </configuration>
2.7 Mybatis快跑
建立一个主类,让我们配置的mybatis跑起来把!!!
- SqlSessionFactoryBuilder 是建造类,为了获得 SqlSessionFactory,你可以称呼它为 sql 会话(session) 工厂
- SqlSessionFactory 工厂里面有好多SqlSession,每个线程都应该有一个 SqlSession(sql 会话),使用
openSession()
f方法获得SqlSession; - 执行完sql操作的方法别忘记关闭sqlSession 哟,要不然以后磁盘崩了别找我!!!
public static void main(String[] args) throws IOException { // 资源路径 String resource = "mybatis-config.xml"; // 配置mybatis获得输入流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建 SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //从 SqlSessionFactory 中获取 SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 使用 SqlSession 查询 List<Student> getStudent = sqlSession.selectList("getStudent"); for (Student student : getStudent){ System.out.println("学生姓名:"+student.getName()+" 学生编号:"+student.getNumber()); } // 关闭 SqlSession sqlSession.close(); }
2.8 mybatis跑出的奖杯
三 源码源码在哪里
小白写试试自己敲啊,不行了再看看哥哥的源码!!!!!!!
youku1327的github