栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

重拾java之mybaties

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

重拾java之mybaties

mybaties基于java的持久层框架,内部封装了jdbc
mybaties=ibaties3.0以后的版本,是半自动化的持久层框架
SQL与java编码分离,sql是开发人员控制。

什么是动态SQL?
同一个dao方法,根据不同的条件可以表示不同的SQL语句。主要是where语句有变化。使用mybatis提供的标签,实现动态语句SQL功能。
主要是if,where,foreach,sql.使用动态SQL的时候,dao方法的形参使用java对象
JDBC访问数据库的优缺点:

优点:直观好理解
缺点:创建好多对象;注册驱动;执行SQL ;把Student转为list集合;关闭资源;sql语句和业务逻辑混在一起

mabites能做什么?
1.注册驱动
2.创建jdbc中使用的connection,
3.执行SQL,得到resultset
4.处理resultset,把数据集中的对象向转为java对象,同时还能把java对象放到放入list集合里
5.关闭资源
6.实现java代码和SQL语句解耦合。

实现步骤:
0.创建student表(id,name,email,age)

1.新建maven项目
2.修改pom.xml文件(mybaties依赖,mysql驱动,junit),在build加入资源插件

3.创建student实体类,定义属性,属性名和类名一致

4.创建dao接口,定义操作数据库方法

5.创建xml文件(mapper文件),写SQL语句的(mybaties框架推荐是把SQL语句和java代码分开),mapper文件,定义到和dao接口同意目录下,一个表一个mapper文件
使用dao的代理要求:
mapper文件中的namespace:必须是dao接口的全限定名称
mappre文件中标签的id是dao接口中的接口名称

6.创建mybaties的主配置文件(xml文件)
1)创建链接实例数据源的datasource对象
2)指定其他mapper文件的位置,使用

7.创建测试的内容(此处以一个功能为例子)
1)使用main方法测试mybaties访问数据库
2)也可以使用junit测试访问数据库

进阶阶段:
将创建SQLsession的过程封装进java对象里,用的时候直接调用该对象的方法
补充:sqlsession不是线程安全的,使用的步骤:
1.在方法的内部,执行sql语句之前,先获取SQLsession对象
2.调用sqlsession的方法,执行sql语句
3.关闭sqlsession对象,执行sqlsession.close()


多个简单类型的参数 ,使用@param命名参数,注解是mybatis提供
// 位置:形参定义前面
// 属性:value自定义的参数名称
// 在mapper中,使用命名的参数名#{}

还可以通过参数的位置获取参数


当参数是map类型。key是mapper中的参数名,value是实际数值

#和$的区别?

#占位符,语法#{字符}。mybatis处理#{}使用的是jdbc对象的preparmentStatment对象。
特点:使用preparmentStatment对象,执行SQL语句,效率高。能够避免SQL注入,使SQL更安全。常常作为列值使用的,位于等号的右侧
占 位 符 : 语 法 占位符:语法 占位符:语法{字符}。 站 位 符 表 示 字 符 串 的 链 接 。 把 S Q L 语 句 的 其 他 内 容 和 站位符表示字符串的链接。把SQL语句的其他内容和 站位符表示字符串的链接。把SQL语句的其他内容和{}内容使用字符串(+)链接的方式连接在一起
特点:使用Statment对象,执行SQL语句,效率低。使用 占 位 符 的 值 , 使 用 字 符 串 链 接 方 式 , 有 S Q L 注 入 风 险 。 {}占位符的值,使用字符串链接方式,有SQL注入风险。 占位符的值,使用字符串链接方式,有SQL注入风险。{}数据是原样使用的,不会区分数据类型
常用作表名或列名。在能保证数据安全的情况下使用${}


当接口方法中的参数是class对象时,参数名称可直接使用对象中的参数名


resulttype(在mapper文件中=创建对象)和resultmap的区别:
resulttype
1.表示自定义类型
2.表示简单类型
3.表示map结构,只用于一行数据,否则会报错(一个key匹配多个值)

resultmap:结果映射,自定义类名和属性名之间的对应关系。用在了列名和属性名不同的情况
用法:
1.定义resultmap标签,指定类名和属性名对应的关系
2.在select标签中使用resulemap属性,指定上面定义的resultmap的id值
resultmap只能查询一行数据
因为resultmap会把数据库的列值作为key值,查到的数据作为value值。如果查询多个数据,会出现一个key对应多个map的情况,会报错
resulttype和resultmap不能同时用

like:

第一种方式:在java程序中,把like的内容组装好,把内容传给SQL语句
String name = “%g%”;
List list = studentDao.selectlikeone(name);
第二种方式,在SQL语句中,组织like内容
SQL语句like格式,where name like “%“空格#{name}空格”%”

if:
语法:

sql 代码

在mapper文件中

实体符号表:
< <
> >
>= >=
<= <=

where:
语法:里面是一个或多个if标签,当if条件判断为ture,转换为where关键字
语法:

sql 代码
sql 代码
sql 代码

foreach:使用foreach可以循环数组,list集合
item=“集合中的成员” separator=“集合成员之间的分隔符”
#{item}
/foreach>
collection:表示要循环的是数组还是list集合
#{item}:获取集合成员的值

sql:sql标签用于定义SQL片段,可以是表名,几个字段,where条件都可以。以便其他SQL复用
方式:
1.在mapper中定义SQL代码片段部分SQL语句
2.在其他位置,使用include标签引用某个代码片段

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/307072.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号