Mybatis框架-1
1.Mybatis框架:
Mybatis是一个半自动的对象关系映射(ORM),实现结果集的自动封装,sql写到配置文件中;
Mybatis使用的是DTD约束。
2.Mybatis模块调用:

3.SqlMapConfig.xml :Mybatis框架的核心配置。
default=“MySql”---> 默认使用MySQL数据库
映射配置中的resource=“”--> 单个对象的映射文件
<?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="mysql">
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydb1?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="admin" />
</dataSource>
</environment> <environment id="oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
<property name="username" value="ht1602" />
<property name="password" value="htdb" />
</dataSource>
</environment>
</environments> <!-- 映射文件 -->
<mappers>
<mapper resource="pojo/UserMapper.xml" />
</mappers> </configuration>
4.XXXMapper.xml:一张表对应一个对象,则所有关于这张表的增删查改的SQL都写在一个配置文件中。
resultType="Javabean的全限定名" --> 将结果集自动封装到对象中
${ } 和 #{ } 的基本抉择:
作用:
1.含有预编译的效果,能够防止sql注入攻击
2.为参数添加了一对""号
注意事项:
如果sql语句中以列名为参数时,切记使用${Map中的key},必须配置Map一起联用.
总结
以列名为参数时使用${},其他的使用#{}
能用#{}取值,决不用${}
<?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"> <!-- namespace:唯一标识映射文件 -->
<mapper namespace="pojo.UserMapper"> <!-- resultType: 将结果集自动封装到对象中 -->
<select id="find" resultType="pojo.User">
select * from account
</select> <!-- #{对象的属性} -->
<insert id="adduser">
insert into account (id,name,money) values (null,#{name},#{money})
</insert> <update id="updatauser">
update account set money=#{money} where id=#{id}
</update> <!-- ${map中的Key} -->
<select id="selectByMoney" resultType="pojo.User">
select * from account where money > ${minMoney} <![CDATA[and money< ${maxMoney} ]]>
</select> </mapper>
<![CDATA[ ... ]]> :大段转义字符;写在中括号内部的字符都将变成字符串输出。这样就避免了xml文件中的关键符号;一般在用xml作为数据传输格式时这个可以方便将整个xml文件输出字符串进行传输
5.获取数据库连接(SqlSessionFactory):
1.通过流读取Mybatis核心配置文件;
2.创建SalSessionFactory对象;
3.获取数据库连接(SqlSession);
6.执行数据库的CRUD:
--->openSession()
@Test
public void test1() throws IOException{ //通过流读取Mybatis核心配置文件
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml"); //获取SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //从数据源中获取连接
SqlSession openSession = factory.openSession(); //执行sql ---namespace.id
List<User> list = openSession.selectList("pojo.UserMapper.find"); for (User user : list) {
System.out.println(user);
} }
7.Mybatis中的多值传递问题
如需求:
要求查询年龄在18-22之间的人
问题:在Mybatis中只支持单值的传递.多值传递时没有现成的API
解决方法:
可以将多个值转化为单个对象或Map
建议:
如果是插入操作/更新操作,使用对象.其他的使用MAP
8.动态更新操作
需求:
如果某些数据只修改特定的值,其他参数不变,这时需要使用动态更新
基本语法:
<update id="dynamicUpdate">
update user
<set>
<if test="name !=null">name=#{name},</if>
<if test="age !=null">age=#{age},</if>
<if test="sex !=null">sex=#{sex}</if>
</set>
where id=#{id}
</update>
set标签的作用:去除where条件前多余的1个逗号
9.动态查询
需求:
根据对象中的属性值,查询信息
方案:使用动态查询
基本语法:
<select id="dynamicFind" resultType="pojo.User">
select * from user
<where>
<if test="id !=null">id=#{id}</if>
<if test="name !=null">and name = #{name}</if>
<if test="age !=null">and age = #{age}</if>
<if test="sex !=null">and sex = #{sex}</if>
</where>
</select>
Where标签的作用:去除where后边多余1个的and
9.动态插入操作
<insert id="addUser">
insert into user
<!--trim能够实现拼接 和去除指定的元素 -->
<trim prefix="(" suffix=")" suffixOverrides=",">
id,
<if test="name !=null">name,</if>
<if test="age !=null">age,</if>
<if test="sex !=null">sex</if>
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
null,
<if test="name !=null">#{name},</if>
<if test="age !=null"> #{age},</if>
<if test="sex !=null"> #{sex}</if>
</trim>
</insert>
trim能够实现拼接 和去除指定的元素
10.批量删除(遍历)
需求:
删除ID从20---31的数据
解决方法:
使用in关键字实现动态删除
** 注意:collection=“...” --- 数组:array、List集合:list、Map集合:map中的key
<delete id="deleteUser">
delete from user where id in
<!--遍历数组 -->
<foreach collection="array" open="(" close=")"
item="id" separator=",">
#{id}
</foreach>
</delete>
11.别名标签
需求:
当进行结果集映射时,如果包名比较长,这时进行封装比较麻烦.
解决方法:用别名标签
<!--定义别名标签
type="需要起别名的类型"
alias="User" 类名
-->
<typeAliases>
<typeAlias type="pojo.User" alias="User"/>
</typeAliases>
12.Mybatis中单值传递问题

说明:在Mybaits中如果传递的参数为单值例如 12,"String".通过#{}取值时,参数可以是任意。
13.sql的复用

如果需要多表关联时,sql语句较多,可以使用sql标签进行简化.但是可读性降低了.
Mybatis框架-1的更多相关文章
- Mybatis框架的多对一关联关系(六)
一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- Hibernate框架与Mybatis框架的对比
学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...
- 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)
此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- Spring3.0 与 MyBatis框架 整合小实例
本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
随机推荐
- kubernetes创建资源对象yaml文件例子--pod详解
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: ...
- nginx 负载均衡实现
https://www.cnblogs.com/wang-meng/p/5861174.html
- 快速搭建rabbitmq单节点并配置使用
安装erlang环境 wget http://erlang.org/download/otp_src_20.3.tar.gz tar xf otp_src_20.3.tar.gz && ...
- .net core 安装Swagger
Install-Package Swashbuckle -Pre 1.Startup // This method gets called by the runtime. Use this metho ...
- Ubuntu 15.04 编译UE4 for Linux版
源 起 Unreal Engine 4 是全球最先进的Realtime Illumination & Physical 引擎: 长期以来,UE4都只有Windows版和Mac版,今年终于向Li ...
- 【洛谷 P4568】 [JLOI2011]飞行路线 (分层最短路)
题目链接 分层图最短路. 把每个点拆成\(k+1\)个点,表示总共有\(k+1\)层. 然后每层正常连边, 若\((u,v)\)有边,则把每一层的\(u\)和下一层的\(v\).每一层的\(v\)和下 ...
- No 'Access-Control-Allow-Origin' Ajax跨域访问解决方案
No 'Access-Control-Allow-Origin' header is present on the requested resource. 当使用ajax访问远程服务器时,请求失败,浏 ...
- vue双向绑定原理源码解析
当我们学习angular或者vue的时候,其双向绑定为我们开发带来了诸多便捷,今天我们就来分析一下vue双向绑定的原理. 简易vue源码地址:https://github.com/maxlove123 ...
- 第一章:读取文件一行IO::File
#!c:\\perl\\bin\\perl.exe use IO::File; #读取一行 my $fd = IO::File->new('perl.txt'); my $one_line = ...
- nginx路由文件配置
nginx中文文档 Nginx 的请求处理有多个阶段,比如说rewrite.access.content等等,不同的配置字段属于不同的配置阶段,不同阶段的先后执行顺序不一样,例如rewrite在con ...