万物皆框架的年代,对数据库的操作框架当然是我们必须要学的东西,我想之前用JDBC有点头疼吧,可能也使用过什么JDBCTempalte吧,有一说一,比原生的JDBC好用太多了。但是现在,来试试MyBatis,欲罢不能框架(其实还是有点繁琐)由于官网有中文的文档,所以我可能不会写太多的笔记哦。
简介
什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
现在持久化的框架(ORM):国内而言比较流行的就是MyBatis和Spring Data这两个了,前者占据上风。
先来说说这个原生JDBC 这个东西的问题:
数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。
使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能 多也可能少,修改 sql 还要修改代码,系统不易维护。
对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记 录封装成 pojo 对象解析比较方便。
快速开发搭建环境
老的三步走(导包,配置,测试)
导包:(Maven方式,见了鬼了,我之前用的全是手动导入)
<dependencies> <dependency> <groupId>org.mybatisgroupId> <artifactId>mybatisartifactId> <version>3.4.5version> dependency> <dependency> <groupId>junitgroupId> <artifactId>junitartifactId> <version>4.12version> <scope>testscope> dependency> <dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>5.1.47version> <scope>runtimescope> dependency> <dependency> <groupId>log4jgroupId> <artifactId>log4jartifactId> <version>1.2.12version> dependency> dependencies>
我们需要一个实体类:(对应数据库的表,数据库表我就不贴图了)
public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address; //setter和getter方法就不写了,还有一个toString}
编写一个持久层的接口:
public interface IUserDao { /** * 查询所有用户 * @return */ List findAll(); }
注意:不再需要编写实现类,由一个配置文件充当这个实现类!!!
写配置
编写一个配置文件,名字需要为:(IUserDao.xml)接口名.xml
这里有一个需要注意的地方:创建的位置必须需要和接口在同一个包中
这里有两种方式:
将这个文件直接放在接口的包下
在资源文件在创建和接口一样的包以及层次接口
如下:
配置文件的内容
<?xml version="1.0" encoding="UTF-8"?> <mapper namespace="com.itheima.dao.IUserDao"> <select id="findAll" resultType="com.domain.User"> select * from user select> mapper>
我们还需要一个主配置文件:(定义mybatis这个东西怎么跑)和一个日志文件
<?xml version="1.0" encoding="UTF-8"?> /span> PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC">transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/> <property name="username" value="数据库账号"/> <property name="password" value="连接密码"/> dataSource> environment> environments> <mappers> <mapper resource="com/dao/IUserDao.xml"/> mappers> configuration>
配置文件如下:(名字为log4j.xml)
<?xml version="1.0" encoding="UTF-8" ?> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <param name="Encoding" value="UTF-8" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /> layout> appender> <logger name="java.sql"> <level value="debug" /> logger> <logger name="org.apache.ibatis"> <level value="info" /> logger> <root> <level value="debug" /> <appender-ref ref="STDOUT" /> root>log4j:configuration>
最后一步:(测试)
public class MybatisTest { public static void main(String[] args)throws Exception { //1.读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建 SqlSessionFactory 的构建者对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //3.使用构建者创建工厂对象 SqlSessionFactory SqlSessionFactory factory = builder.build(in); //4.使用 SqlSessionFactory 生产 SqlSession 对象 SqlSession session = factory.openSession(); //5.使用 SqlSession 创建 dao 接口的代理对象 IUserDao userDao = session.getMapper(IUserDao.class); //6.使用代理对象执行查询所有方法 List users = userDao.findAll(); for(User user : users) { System.out.println(user); } //7.释放资源 session.close(); in.close(); } }
就这样一个基本的操作就完成了(可参考官网的配置),其中的什么配置啊,代码后续再详细讲解哦!