ORM:
ORM(Object/Relational Mapping),即对象/关系映射.ORM是一类框架的总称,这类框架完成了对象数据到关系型数据的映射.使开发人员能够以面向对象的思想,操作数据库.
常见的ORM框架:
1 .MyBatis,
2. Hibernate,
3. 3.TopLink...
----认识MyBatis:
一。概念:
MyBatis是一种基于Java的持久层框架,支持定制化SQL,存储过程以及高级映射的持久层框架.最初是apache的开源项目–iBatis,2010年由apache迁移到google,并改名为MyBatis.在2013年11月由google迁移到GitHub
二。特点:
1.MyBatis是一个轻量级ORM框架,只需mybatis-*.jar和数据库驱动器即可运行.
2.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
3.将SQL代码与程序代码分离,利于SQL重用和修改
4.MyBatis不会对应用程序或数据库的设计强加任何影响,提高应用的灵活性
三。mybatis官网 [可以查看mybatis框架的帮助文档]:
https://mybatis.org/mybatis-3/zh/index.html
四。mybatis下载框架:
https://github.com/mybatis/mybatis-3/releases
----开发步骤:
第1步: 添加jar包
- mybatis-3.5.1.jar
- mysql-connector-java-5.1.22-bin.jar
第2步: 编写配置文件
注意: 配置文件名称和位置不限,但是通常称为mybatis-config.xml,存入到src下
<?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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="驱动器入口类的全名称"/>
<property name="url" value="url地址信息"/>
<property name="username" value="账户"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
<!--添加映射文件-->
<mappers>
<mapper resource="包名1/包名2/.../文件名.xml"/>
</mappers>
</configuration>
第3步: 编写映射文件
<?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">
<!--在当前XML中编写针对User的CURD操作命令-->
<mapper namespace="命名空间[类似包的作用]">
<select/insert/update/delete id="业务标记名" resultType="实体类全名" parameterType="占位符类型">
SQL命令
</select/insert/update/delete>
</mapper>
备注: 映射文件用于实现 实体对象与数据表字段的映射关系
第4步: 编写启动程序
//获得MyBatis的配置文件: 数据库信息,映射文件信息[SQL]
InputStream is=Resources.getResourceAsStream(配置文件位置/配置文件名.xml");//参数 为配置文件的位置: a/mybatis-config.xml
//基于配置信息创建SqlSessionFactory
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
//获得SqlSession: 连接数据库
SqlSession session=factory.openSession();
//数据库操作: CURD
session.CURD方法名("命名空间.业务标识名");//映射文件中的命名空间和业务标识名
//执行映射文件中的哪个SQL
//提交事务
session.commit();
//关闭连接
session.close();
----认识配置文件:
介绍
MyBatis的配置文件中包含了影响MyBatis行为和属性的信息,控制MyBatis的整体运行方式.配置文件中主要配置数据源[驱动类,URL,账号,密码],事务管理,加载指定映射文件.
说明:
1.MyBatis配置文件的名称和位置自定义.
2.MyBatis未提供源码和案例,配置和映射内容参考官网或使用指南
3.MyBatis配置文件顶层结构如下:
基本格式:
-----配置标签:
<environments>
作用:
声明一组运行环境.[支持多数据库]
属性:
default: 设置默认运行环境,属性值为某个<environment>的id值.
<environment>
作用:
定义1个运行环境
属性:
id: 设置当前环境的匿称,名称任意.通常为development和work.
<transactionManager>:
作用:
指定事务管理器,MyBatis含有2种事务管理器[JDBC和MANAGED]
属性:
type: JDBC[使用JDBC的提交和回滚设置],MANAGED[使用其他容器管理事务提交和回滚]
<dataSource>:
作用:
该标签通过标准的JDBC数据源接口来配置JDBC连接对象的资源
属性:
type: 设置数据源的类型,属性值为POOLED|UNPOOLED|JNDI
POOLED:使用连接池.从连接池中取出连接,关闭时将该连接放回连接池
UNPOOLED: 不使用连接池.每次都打开新连接,关闭时将彻底关闭该连接
JNDI: 从其他容器中获得连接
<property>:
作用:
定义数据源的指定属性和值
属性:
name: 属性名.在<dataSource>中,name通常为driver/url/username/password或其他
value: 属性值.
|-----配置数据源:
方式1: 直接在property中写明参数值
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
方式2:
<!--配置环境-->
<properties>
<property name="mydriver" value="com.mysql.jdbc.Driver"/>
<property name="myurl" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="myusername" value="root"/>
<property name="mypassword" value="123456"/>
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/><!--配置事务管理的方式: JDBC,MANAGED-->
<!--配置数据源: 账户/密码 URL 驱动器 连接数据库 -->
<dataSource type="POOLED"><!--type定义数据连接方式: POOLED[使用连接池]|UNPOOLED|JNDI-->
<property name="driver" value="${mydriver}"/><!--Class.forName("com.mysql.jdbc.Driver")-->
<property name="url" value="${myurl}"/>
<property name="username" value="${myusername}"/>
<property name="password" value="${mypassword}"/>
</dataSource>
</environment>
</environments>
方式3:在外部创建一个新的propertiet文件在文件中储存配置数据源
<properties resource="DBSource.properties" />
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/><!--配置事务管理的方式: JDBC,MANAGED-->
<dataSource type="POOLED"><!--type定义数据连接方式: POOLED[使用连接池]|UNPOOLED|JNDI-->
<property name="driver" value="${db.driver}"/><!--Class.forName("com.mysql.jdbc.Driver")-->
<property name="url" value="${db.url}"/>
<property name="username" value="${db.user}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
方式4: 了解
—认识映射文件:
一。介绍:
MyBatis的映射文件主要用于定义业务操作命令,实现对象与数据表字段的映射,并控制对最终结果的封装.MyBatis是针对SQL构建,相对具有相同功能的JDBC代码,减少了95%的代码量
二。说明:
1.映射文件名称和位置任意,不要求必须与POJO类在同一位置
2.MyBatis未提供源码和案例,配置和映射内容参考官网或使用指南
3.MyBatis映射文件顶层结构如下:
三。基本格式:
<mapper namespace="匿名空间">
<select/insert/update/delete... id="业务标识名" resultType="封装结果的对象[实体类全名]" parameterType="占位符的来源">
SQL命令
</select/insert/update/delete等等>
</mapper>
四。说明:
1.namespace: 表示命名空间,类似Java包的作用.[在旧版中可选,在新版中必须配置]
2.id: 设置业务操作匿名,方便程序中调用.
3.parameterType: 指出将要传入SQL命令中的占位符的类型,可以是普通类型或自定义类.
4.resultType: 指出SQL命令执行结果的类型.若结果为集合,该属性值为元素的类型名.
5.statementType: 设置SQL执行对象的类型: STATEMENT,PREPARED[默认值],CALLABLE.
6.SQL命令末尾后的分号,可选
五。占位符:
1.介绍:
Mybatis映射文件中的SQL命令,支持以占位符方式设置字段的值.同JDBC那样,当执行SQL命令时需要额外指出占位符的值.
2.格式:
#{占位符名}
#{uname}
3.说明:
- .占位符的值可以来自实体对象,Map集合,普通数据
- .若占位符的值来自普通数据,占位符名 任意. [仅1个占位符,比如 id]
- .若占位符的值来自实体对象,占位符名 必须为对象的属性名
- .若占位符的值来自Map集合,占位符名 必须为键名
|-----结果映射
介绍:
MyBatis自动将POJO对象的属性与查询结果集中字段名或添加/修改/删除中占位符名映射,实现对象与表的映射关系.
同时,MyBatis提供了手动设置POJO对象属性与执行结果映射的方式: [resultMap]
解决字段名与属性名不同,无法映射:
方式1: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。
select id, username as name, sex,age,address from user
方式2: 通过[resultMap]标签来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。
<resultMap>
<select id="" resultType="" resultMap="resultMap匿名A">
SQL命令
</select>
<!--自定义映射规则-->
<resultMap id="resultMap匿名A" type="实体类全名">
//用id属性来映射主键字段
<id property="主键属性" column="主键字段名" />
//用result属性来映射非主键字段
<result property="普通属性" column="字段名" />
</resultMap>
-----加载映射文件:
方式1: resource方式加载映射文件
格式:
<mapper resource="映射文件路径">
resource: 使用相对类路径,指出映射文件的位置.比如 bean/User.xml
方式2:class方式这里需要注意:接口类 和映射文件放在同一个目录下,并文件名要一致
格式:
<mapper class="映射文件路径">
class: 使用类全名,指出映射器接口的位置.比如: bean.UserMapper[UserMapper为接口
方式3:url方式
格式:
<mapper url="映射文件路径">
url: 使用绝对路径,指出映射文件的位置.比如: file:///bean/User.xml
方式4:包扫描加载映射文件 : 接口类 和映射文件放在同一个目录下,并文件名要一致
格式:
<package name="包名" />
说明:
将指定包中所有接口类,在MyBatis中注册.
注意: mapper接口和映射文件名称要相同,且在同1目录下
|----自定义别名:
格式:
<typeAliases></typeAliases>
方式1: 定义指定类的别名 [定义单个类的别名]
<typeAlias type="类全名" alias="别名[名称任意]" />
代码实例:
···<!-- mybatis-config.xml 中 -->
<typeAlias type="com.someapp.model.User[设置前类名称]" alias="User[设置后的类名称]"/>//设置user类的类全名别名为User.
<!-- SQL 映射 XML 中 -->
<select id="selectUsers" resultType="User[设置后的类别名]">
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
方式2: 批量定义类别名
<typeAliases>
<package name="包名" />
</typeAliases>
定义后别名等于类名,不区分大小写,但建议使用java命名规则 首字母小写。