一、MyBatista概述
1、三层架构
①、表现层
用于展示数据
②、业务层
处理业务需求
③、持久层
与数据库交互
2、MyBatista框架概述
- MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2、MyBatista环境搭建
1、pom中引入maven依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
2、数据库建表并生成对应domain
1、建表
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 AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', '张三', '2018-02-27 17:47:08', '男', '北京');
INSERT INTO `user` VALUES ('2', '李四', '2018-03-02 15:09:37', '女', '北京');
INSERT INTO `user` VALUES ('3', '王五', '2018-03-04 11:34:34', '女', '北京');
INSERT INTO `user` VALUES ('4', '章鱼哥', '2018-03-04 12:04:06', '男', '北京');
INSERT INTO `user` VALUES ('5', '派大星', '2018-03-07 17:37:26', '男', '北京');
INSERT INTO `user` VALUES ('6', '海绵宝宝', '2018-03-08 11:44:00', '男', '北京');
2、生成domain
public class User{
//id
private Integer id;
//用户名称
private String username;
//生日
private Date birthday;
//性别
private String sex;
//地址
private String address;
GetSet方法
toString方法
}
3、生成dao
public interface IUserDao {
List<User> findall();
}
4、MyBatis配置-SqlMapConfig.xml
<?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">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.1.111:3306/MyBatis"/>
<property name="username" value="root"/>
<property name="password" value="0365"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="top/yumier/myBatis/dao/IUserDao.xml"/>
</mappers>
</configuration>
5、编写mapper文件
<?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="top.yumier.myBatis.dao.IUserDao">
<select id="findAll" resultType="top.yumier.myBatis.domain.User">
select * from user
</select>
</mapper>
6、注意事项与测试
public class test {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
}
3、MyBatista具体使用
1、基于注解开发
public interface IUserDao {
@Select("select * from user")
List<User> findAll();
}
<mappers>
<package name="top.yumier.myBatis.dao"/>
</mappers>
4、Spring整合MyBatista
<!--Spring整合MyBatis框架-->
<!--配置连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://192.168.1.111:3306/MyBatis"/>
<property name="user" value="root"/>
<property name="password" value="0365"/>
</bean>
<!--配置SqlSessionFactory工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<!--配置AccountDao接口所在包-->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="top.yumier.ssm.dao"/>
</bean>