Mybaits
Mybatis是一个框架:
框架:框架就是一个封装完的模式,根据开发的习惯,对重复的冗余的代码进行封装,形成固定的解决问题的方式,具备这一领域开发的功能的插件(组件)。
Mybatis简介:
Mybatis是一个框架,连接数据库的框架,对数据进行增删改查操作,底层依然是JDBC,基于JDBC做了简单的映射封装,ORM封装。
ORM(对象关系映射)数据库里的User表,相当于JAVA代码里的User类,User表里的UserName,UserAge 等 相当于User类里的一个属性,User表里的一条记录相当于User类里的一个对象,这样就把数据库和Java代码对应起来了
JDBC:
1.加载数据库驱动
2.创建数据库连接
3.创建JDBC Statement对象
4.设置SQL
5.设置参数
6.获取结果
7.处理结果
8.释放资源
问题:
1.创建连接,释放资源频繁,浪费资源-------数据库连接池
2.SQL语句写在JAVA代码中,硬编码,不利于维护
3.preparedStatement设置参数,硬编码
4.解析编码,硬编码,sql变化导致结果变化,解析代码变化。
入门案例:
1.导入主体结构(jar包)
核心包:mabatis-x.x.x.jar
数据库连接:mysql.x.x.x.jar
依赖包---日志包
2.添加核心配置文件:
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 <configuration> 6 <!-- 环境配置:数据库信息 --> 7 <environments default="development"> 8 <environment id="development"> 9 <transactionManager type="JDBC"/> 10 <dataSource type="POOLED"> 11 <property name="driver" value="com.mysql.jdbc.Driver"/> 12 <property name="url" value="jdbc:mysql://localhost:3306/0506java"/> 13 <property name="username" value="root"/> 14 <property name="password" value="root"/> 15 </dataSource> 16 </environment> 17 </environments> 18 <!-- 注意位置 --> 19 <mappers> 20 <mapper resource="com/ujiuye/mapper/UserMapper.xml"/> 21 </mappers> 22 </configuration>
3.创建实体类:
序列化
属性如果是基本数据类型,使用包装类
提供set,get方法
4.添加Mapper
结果类型,查询的时候需要添加:
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 <!-- 命名空间 隔离SQL --> 6 <mapper namespace="test"> 7 <!-- 根据ID查询 --> 8 <!-- 9 parameterType:参数类型 数据库类型 10 resultType:查询是需要添加,用来表示结果类型 11 Id:方法名(执行sql的名字) 12 #{id}:占位符 13 --> 14 <select id="queryByID" parameterType="int" 15 resultType="com.ujiuye.pojo.User"> 16 select * from user where id=#{id} 17 </select> 18 </mapper>
5.测试
创建工厂:读取配置文件
创建Session对象:通过工厂创建
数据库操作
MyBatis动态代理:
代理的部分:Dao层开发取消实现类,用Mapper.xml代替
过程:定义接口(CRUD),创建Mapper.xml
注意:Mapper.xml文件名与接口一致
Properties标签:
Typealiases标签
Mapper标签
resultMap标签
动态SQL
If,where标签
Foreach标签
SQL片段
关联查询
一对一(方法一)
使用Resulttype
创建实体类:包含查询需要的类中所有属性
编写Mapper
一对一查询(方法二)
一对多查询