1.框架:
Def:它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。
Mybatis解决的是持久层的问题 https://blog.csdn.net/ycgslh/article/details/80050025
使用框架的好处:
框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。
2.三层架构
表现层:展示数据 类似JSP
业务层:处理业务需求 类似Service层
持久层:与数据库交互 类似DAO层
JDBC技术:
Connection
PreparedStatement
ResultSet
Spring的JdbcTemplate:
Spring中对jdbc的简单封装
Apache的DBUtils:
它和Spring的jdbcTemplate很像,也是对jdbc的简单封装
以上这些都不是框架
JDBC是规范
Spring的JdbcTemplate和Apache的DBUtils都只是工具类
3.mybatis的概述
mybatis是一个持久层框架,用java编写的。
它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程
它使用了ORM思想实现了结果集的封装。
mybatis通过配置.xml或注解的方式将要执行的各种Statement配置起来,并通过java对象和Statement中的sql的动态参数进行映射,生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成为java对象并返回。
方法:ORM(Object Relational Mappging 对象关系映射) ------>解决实体和数据库映射的问题
简单的说:
就是把数据库表和实体类及实体类的属性对应起来
让我们可以操作实体类就实现操作数据库表。
要将实体类中的属性(私有属性需要有get、set方法)和数据库表的字段名保持一致。 使其得以映射
注意:命名规则:小驼峰的大写字母会自动更改成_+其小写字母 eg:realName -- > real_name
(在eclipse中需打开setting的开关 不然无法找到)
4.建立简单MyBatis项目 4.1.打开idea 建立maven文件 4.2.在pom.xml中配置打包方式和依赖 这个依赖不只要配置mybatis的,由于是对数据库的操作,因此也需要配置mysql的依赖
4.3 创建实体类和Dao接口
建立model包 创建UserModel类 与数据库表中字段对应创建属性 即可自动映射 生成get()、set()、toString()方法
1 package model;
2
3 import java.io.Serializable;
4 import java.util.Calendar;
5
6 public class UserModel implements Serializable {
7 private Integer id;
8 private String userName;
9 private Calendar birthday;
10 private String sex;
11 private String address;
12 @Override
13 public String toString() {
14 return "UserModel{" +
15 "id=" + id +
16 ", userName='" + userName + '\'' +
17 ", birthday=" + birthday +
18 ", sex='" + sex + '\'' +
19 ", address='" + address + '\'' +
20 '}';
21 }
22
23 public Integer getId() {
24 return id;
25 }
26
27 public void setId(Integer id) {
28 this.id = id;
29 }
30
31 public String getUserName() {
32 return userName;
33 }
34
35 public void setUserName(String userName) {
36 this.userName = userName;
37 }
38
39 public Calendar getBirthday() {
40 return birthday;
41 }
42
43 public void setBirthday(Calendar birthday) {
44 this.birthday = birthday;
45 }
46
47 public String getSex() {
48 return sex;
49 }
50
51 public void setSex(String sex) {
52 this.sex = sex;
53 }
54
55 public String getAddress() {
56 return address;
57 }
58
59 public void setAddress(String address) {
60 this.address = address;
61 }
62 }
1 package dao;
2
3 /*
4 * 用户的持久层接口
5 * */
6
7 import model.UserModel;
8
9 import java.util.List;
10
11 public interface UserDao {
12 /*
13 * 获取全部列表 即查询所有操作
14 * @return List<UserModel>
15 * */
16 List<UserModel> list();
17 }
4.4 创建Mybatis的主配置文件 my.xml
1 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <!--mybaits的主配置文件--> 6 <configuration> 7 <!--配置环境--> 8 <!--default的名称自定义 但是必须要在id里进行声明--> 9 <environments default="development"> 10 <!--配置mysql环境--> 11 <environment id="development"> 12 <!--配置事务类型--> 13 <!-- 一般J2EE服务器支持三种类型的事务管理。即:JDBC事务,JTA事务,容器管理事务。 --> 14 <transactionManager type="JDBC"></transactionManager> 15 <!--配置数据源(连接池)--> 16 <dataSource type="POOLED"> 17 <!--配置连接数据库的4个基本信息--> 18 <property name="driver" value="com.mysql.jdbc.Driver"/> 19 <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/> 20 <property name="username" value="root"/> 21 <property name="password" value="123456"/> 22 </dataSource> 23 </environment> 24 </environments> 25 26 27 <!--指定映射配置文件的位置,映射配置文件指的的每个dao独立的配置文件--> 28 <mappers> 29 <mapper resource="config/mybatis/UserDao.xml"></mapper> 30 </mappers> 31 </configuration>
4.5 创建映射配置文件 UserDao.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="config/mybatis/UserDao.xml"> 6 <!--配置查询所有 所以用select标签 id=" " 方法名称 --> 7 <select id="list" resultMap=""> 8 select * from user ; 9 </select> 10 </mapper>
环境搭建的注意事项: 第一个:创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。 在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper 所以:IUserDao 和 IUserMapper是一样的 第二个:在idea中创建目录的时候,它和包是不一样的 包在创建时:com.itheima.dao它是三级结构 目录在创建时:com.itheima.dao是一级目录 第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同(三级结构原因) 第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名 第五个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名 当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。
mybatis的入门案例
1.读取配置文件
2.创建SqlSessionFactory工厂
3.创建SqlSession
4.创建Dao接口的代理对象
5.使用代理对象执行dao中的方法
6.释放资源创建一个MyBatisTest的java类
1 import dao.UserDao;
2 import model.UserModel;
3 import org.apache.ibatis.io.Resources;
4 import org.apache.ibatis.session.*;
5
6 import java.io.InputStream;
7 import java.util.List;
8
9 public class MyBatisTest {
10 public static void main(String[] args) throws Exception{
11 // 1.读取配置文件
12 InputStream in=Resources.getResourceAsStream("config/mybatis/my.xml"); //自己根据自己所建的项目目录进行创建
13 // 2.创建工厂对象
14 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
15 // 3.创建SqlSession
16 SqlSession session = factory.openSession();
17 // 4.创建Dao接口的代理对象
18 UserDao userDao=session.getMapper(UserDao.class);
19 // 5.使用代理对象执行dao中的方法
20 List<UserModel> userDaoList=userDao.list();
21 for(UserModel userModel: userDaoList){
22 System.out.println(userModel);
23 }
24 // 6.释放资源
25 session.close();
26 in.close();
27 }
28 }
贴心附上本人目录结构
