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 }
贴心附上本人目录结构