1 mybatis 入门程序
1.1  需求
实现用户查询:
根据用户 id (主键)查询用户信息(单条记录)
根据用户名称模糊查询用户信息(多条记录)
用户添加
用户删除
用户修改
 
1.2  导入 jar
 
mybatis 管网下载(地址:https://github.com/mybatis/mybatis-3/releases
 
mybatis-3.2.7.pdf--- 操作手册
 
mybatis-3.2.7.jar-- 核心 jar
 
依赖的 jar
 
 
1.3  工程结构
 
 
1.4 log4j.properties (公用文件)
# Global logging configuration ,建议开发环境中要用 debug
log4j.rootLogger = DEBUG, stdout
# Console output...
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %5p [%t] - %m%n
 
1.5 SqlMapConfig.xml( 公用文件 )
通过 SqlMapConfig.xml 加载 mybatis 运行环境。

 
 
1.6  根据 id 查询用户
 
1.6.1 pojo User.java
 
 
1.6.2 User.xml (重点)
建议命名规则:表名 +mapper.xml
早期 ibatis 命名规则:表名 .xml
 
 
1.6.3  编码
 
在测试前,需要创建 SqlSessionFactory,然后通过这个去创建sqlSession去操作数据库:

 
 
1.7  根据用户名称模糊查询用户信息
根据用户名称模糊查询用户信息可能返回多条记录。
 
1.7.1 User.xml
 
 
1.7.2  编码
 
1.7.3  使用 ${} 接收参数
可看到,如果模糊查询用#{}来接受传入参数,代码会写得很麻烦而且很难看
下面可用${}来接收参数,因为它接收参数时不会添加任何修饰
注意:测试如果${username}会报错

 
 
1.8 mybatis 开发过程小结
1 、编写 SqlMapConfig.xml
2 、编写 mapper.xml
定义了 statement
3 、编程通过配置文件创建 SqlSessionFactory
4 、通过 SqlSessionFactory 获取 SqlSession
5 、通过 SqlSession 操作数据库
如果执行添加、更新、删除需要调用 SqlSession.commit()
6 SqlSesion 使用完成要关闭
 
 
 
1.9  用户添加
向用户表插入一条记录。
 
1.9.1 User.xml

 
 
1.9.2  编码
 
 
1.9.3  主键返回
需求: user 对象插入到数据库后,新记录的主键要通过 user 对象返回,通过 user 获取主键值。
 
解决思路:
通过 LAST_INSERT_ID() 获取刚插入记录的自增主键值:
insert 语句执行后,执行 select LAST_INSERT_ID() 就可以获取自增主键。
 
User.xml 修改:

代码:

 
使用 mysql uuid 机制生成主键:
 
使用 uuid 生成主键的好处是不考虑数据库移植后主键冲突问题。
注意:uuid()返回的是字符串类型,就是表中id字段要是字符串类型的
 
实现思路:
先查询 uuid 得到主键,将主键设置到 user 对象中,将 user 对象插入数据库。
 
 
 
实现 oracle 数据库主键返回,如何做??
oracle 没有自增主键机制,使用序列完成主键生成。
 
实现思路:
先查询序列得到主键,将主键设置到 user 对象中,将 user 对象插入数据库。
 
 
 
1.10  用户删除和更新
 
 
1.10.1  编码


1.11  M ybatis 解决 jdbc 编程的问题
1、  数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决: SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。
2、 S ql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变 java 代码。
解决: Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。
3、  sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:M ybatis 自动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输入参数的类型。
4、  对结果集解析麻烦, sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对象解析比较方便。
解决:M ybatis 自动将 sql 执行结果映射至 java 对象,通过 statement 中的 resultType 定义输出结果的类型。
 
 
1.12 mybatis hibernate 重要区别
企业开发进行技术选型 ,考虑 mybatis hibernate 适用场景。
 
mybatis :入门简单,程序容易上手开发,节省开发成本 。 mybatis 需要程序员自己编写 sql 语句,是一个 不完全 ORM 框架,对 sql 修改和优化非常容易实现 。
mybatis 适合开发需求变更频繁的系统,比如:互联网项目。
 
hibernate :入门门槛高,如果用 hibernate 写出高性能的程序不容易实现。 hibernate 不用写 sql 语句,是一个 ORM 框架。
hibernate 适合需求固定,对象数据模型稳定,中小型项目,比如:企业 OA 系统。
 
总之,企业在技术选型时根据项目实际情况,以降低成本和提高系统 可维护性为出发点进行技术选型。
 
 
 
 
1.13  总结
 
1.13.1 SqlMapConfig.xml
mybatis 全局配置文件,只有一个,名称不固定的,主要 mapper.xml mapper.xml 中配置 sql 语句
 
1.13.2 mapper.xml
mapper.xml 是以 statement 为单位进行配置。(把一个 sql 称为一个 statement ), satatement 中配置 sql 语句、 parameterType 输入参数类型(完成输入映射)、 resultType 输出结果类型(完成输出映射)。
 
还提供了 parameterMap 配置输入参数类型(过期了,不推荐使用了)
还提供 resultMap 配置输出结果类型(完成输出映射),明天重点讲通过 resultMap 完成复杂数据类型的映射(一对多,多对多映射)
 
 
1.13.3  #{}
表示一个占位符,向占位符输入参数, mybatis 自动进行 java 类型和 jdbc 类型的转换。
程序员不需要考虑参数的类型,比如:传入字符串, mybatis 最终拼接好的 sql 就是参数两边加单引号。
#{} 接收 pojo 数据,可以使用 OGNL 解析出 pojo 的属性值
1.13.4  ${}
表示 sql 的拼接,通过 ${} 接收参数,将参数的内容不加任何修饰拼接在 sql 中。
${} 也可以接收 pojo 数据,可以使用 OGNL 解析出 pojo 的属性值
 
缺点:不能防止 sql 注入。
 
 
1.13.5  selectOne
用于查询单条记录,不能用于查询多条记录,否则异常:
org.apache.ibatis.exceptions.TooManyResultsException : Expected one result (or null) to be returned by selectOne(), but found: 4
 
 
1.14 selectList
用于查询多条记录,可以用于查询单条记录的。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐