它是咱们软件开发中的一套解决方案,不一样的框架解决的是不一样的问题。使用框架的好处:框架封装了不少的细节,使开发者可使用极简的方式实现功能。大大提升开发效率php
- UI(表现层):与用户交互的界面。用于接收用户输入的数据和显示处理后用户须要的数据。
- BLL(业务逻辑层):UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
- DAL(数据访问层/持久层):与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。
- Entity(实体类):贯穿于三层,在三层之间传递数据;实现面向对象思想中的"封装"(将数据表中的字段封装为类中的属性)。
- 参考:blog.csdn.net/hanxuemin12…
参考:www.cnblogs.com/whgk/p/6435…html
- JDBC技术:Connection;PreparedStatement;ResultSet
- Spring的JdbcTemplate:Spring中对jdbc的简单封装
- Apache的DBUtils:它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装
- 以上这些都不是框架:JDBC是规范;Spring的JdbcTemplate和Apache的DBUtils都只是工具类。没有全面地解决问题。
一、数据库连接建立、释放频繁形成系统资源浪费从而影响系统性能,若是使用数据库连接池可解决此问题。 二、Sql 语句在代码中硬编码,形成代码不易维护,实际应用 sql 变化的可能较大,sql 变更须要改变 java 代码。 三、使用 preparedStatement 向占有位符号传参数存在硬编码,由于 sql 语句的 where 条件不必定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。 四、对结果集解析存在硬编码(查询列名),sql 变化致使解析代码变化,系统不易维护,若是能将数据库记录封装成 pojo 对象解析比较方便。java
- mybatis是一个持久层框架,用java编写的。它封装了jdbc操做的不少细节,使开发者只须要关注sql语句自己,而无需关注注册驱动,建立链接等繁杂过程它使用了ORM思想实现告终果集的封装。
- ORM:Object Relational Mappging 对象关系映射,简单的说,就是把数据库表及字段和实体类及实体类的属性对应起来让咱们能够操做实体类就实现操做数据库表。
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
复制代码
1. 建立maven工程并导入坐标mysql
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ow</groupId>
<artifactId>mybatis01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
复制代码
2. 建立实体类和dao的接口 程序员
public class User implements Serializable{
//实体类中的属性需和数据库表中的字段一一对应
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
//省略get/set方法,和toString方法(alt+insert)
复制代码
public interface IUserDao {
// 查询返回获得的全部符合条件的实体类
List<User> findAll();
}
复制代码
3. 建立Mybatis的主配置文件(SqlMapConifg.xml)sql
<?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>
<!-- 配置 mybatis 的环境 -->
<environments default="mysql">
<!-- 配置 mysql 的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置链接数据库的信息:用的是数据源(链接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatistest?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置,,映射配置文件指的是每一个dao的配置文件 -->
<mappers>
<!-- 这里配置的是接口IUserDao的配置文件 -->
<mapper resource="com/ow/dao/IUserDao.xml"/>
</mappers>
</configuration>
复制代码
4. 编写log4j文件(log4j.properties)数据库
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=G:\\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
复制代码
5. 建立映射配置文件(IUserDao.xml)apache
<?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="com.ow.dao.IUserDao">
<!--配置查询全部 其中id不能乱写必须是dao接口中的方法名称 resultType写的是实体类的全路径-->
<select id="findAll" resultType="com.ow.domain.User">
select * from user
</select>
</mapper>
复制代码
6. 编写测试文件session
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<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//7.释放资源
session.close();
in.close();
}
}
复制代码
- 把IUserDao.xml移除,
- 在dao接口的方法上使用@Select注解,而且指定SQL语句
![]()
- 同时须要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
![]()
欢迎关注个人公众号,了解一个学设计却作了运营最后成了数据分析师并努力成为大数据工程师的女程序员的成长之路。mybatis