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

mybatis入门

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

mybatis入门

1、环境配置

第一步:创建maven工程

第二步:导入坐标(pom.xml的相关依赖)

第三步:编写必要代码(实体类(属性)和持久层接口(Dao或者接口))

第四步:编写SqlMapConfig.xml(数据库连接和设置)

第五步:编写映射配置文件(方法与接口的连接及SQL语句)

第六步:编写测试类(psvm)

2.

--
根据
id
查询
-->

select * from user where id = #{uid}

细节:
resultType
属性:
用于指定结果集的类型。
parameterType
属性:用于指定传入参数的类型。
sql语句中使用#{}字符:
它代表占位符,相当于原来jdbc部分所学的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。
#{}中内容的写法:
由于数据类型是基本类型,
所以此处可以随意写。

3.模糊查询

3.1查询的值不固定

select * from user where username like #{username}
配置文件中的#{username}也只是一个占位符,所以SQL语句显示为“?”。

3.2查询的值固定

select * from user where username like '%${value}%'
我们在上面将原来的#{}占位符,改成了${value}。
注意如果用模糊查询的这种写法,那么${value}的写法就是固定的,不能写成其它名字。

 

#{}表示一个占位符号

通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。#{}可以接收简单类型值或pojo属性值。如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}表示拼接sql串

通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

4、jdbc与mybatis对比

1.数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3.向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。 

 5、解决SQL查询时,有太多数据库列明和实体类之间别名从而有了resultMap

<--建立User实体和数据库表的对应关系

type属性:指定实体类的全限定类名

id属性:给定一个唯一标识,是给查询select标签引用用的。-->













id标签:用于指定主键字段

result标签:用于指定非主键字段

column属性:用于指定数据库列名

property属性:用于指定实体类属性名称

6.自定义别名

在SqlMapConfig.xml中配置:

7.sqlMapConfig.xml

-properties(属性)        --property-settings(全局配置参数)

--setting-typeAliases(类型别名)        --typeAliase--package-typeHandlers(类型处理器)

-objectFactory(对象工厂)                -plugins(插件)

-environments(环境集合属性对象)        --environment(环境子属性对象)

---transactionManager(事务管理)        ---dataSource(数据源)

-mappers(映射器)

 8.动态SQL之if语句

8.1使用情况

根据实体类的不同取值,使用不同的SQL语句来进行查询。比如在id如果不为空时可以根据id查询,如果username不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。

8.2持久层dao映射配置





and usernamelike #{username}


and address like #{address}


9.动态SQL的foreach

9.1使用场景:

9.2