mybatis入门程序
1 mybatis入门程序1.1 需求实现用户查询:根据用户id(主键)查询用户信息(单条记录)根据用户名称模糊查询用户信息(多条记录)用户添加用户删除用户修改 1.2 导入jar包 从mybatis管网下载(地址:https://github.com/mybatis/mybatis-3/releases) mybatis-3.2.7.pdf
·
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
用于查询多条记录,可以用于查询单条记录的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)