版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
常见的数据层访问方式比较:
1. JDBC: java原生的关系型数据库访问方式
- 每次操作数据库都需要获取连接关闭连接,在大量访问数据库时,频繁的开关链接消耗性能。
- 需要手动编写sql语句,有学习成本。
- 查询出的结果需要手动进行封装到bean。
- 没有缓存处理机制。
- sql语句写死在程序中吗,需要修改sql必须修改源文件
2. Hibernate: 基于面向对象理念设计的Dao层框架,基本理念就是维护对象到表的映射关系,通过操作对象操作表中的数据,从而可以减少甚至杜绝sql的使用
6. 相对比较沉重,效率不好
7. 当涉及到比较复杂的查询时,Hibernate的操作对象的方式用起来非常麻烦,甚至无法实现,只能用sql操作
8. 底层需要频繁的拼接sql,产生大量冗余的sql
3. MyBatis: 是一种半自动对象-表映射关系的Dao层框架,可以自动的进行对象的封装,但是sql仍然需要自己来写。
MyBatis详解:
1. MyBatis的结构:
2. Mybatis入门案例:
- a. 创建java项目,并在其中导入相关开发包
- b. 导入约束文件
- c. 编写配置文件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">
<configuration>
<!--配置数据源-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis_test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
- d. 创建表,创建bean
create database mybatisdb;
use mybatisdb;
create table user (
id int primary key auto_increment,
name varchar(255),
age int
);
insert into user values (null,'aaa',19),(null,'bbb',29),(null,'ccc',39),(null,'ddd',22),(null,'eee',33);
package test.domain;
public class User {
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
- e. 编写映射文件,编写bean和表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">
<mapper namespace="test.mybatis.beans.UserMapper">
<select id="queryAll" resultType="test.mybatis.beans.User">
select * from user
</select>
</mapper>
- f. 将映射文件配置到sqlMapConfig.xml文件中
<!--声明映射文件-->
<mappers>
<mapper resource="test/mybatis/beans/UserMapper.xml">
</mappers>
- g. 测试类测试
public class MybatisTest{
@Test
public void test01() throws Excepetion{
//1.读取MyBatis核心配置文件
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
//2.根据配置文件创建sqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.创建SqlSession
SqlSession session = factory.openSession();
//4.执行操作
List<User> list = session.selectList("test.mybatis.beans.UserMapper.queryAll")
//5.遍历结果
System.out.println(Arrays.toString(list.toArray()))
}
}