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 文件 ...
随机推荐
- stout代码分析之八:cache类
stout中实现了LRU cache.cache的成员如下: public: typedef std::list<Key> list; typedef std::tr1::unordere ...
- 跨域共享cookie和跨域共享session
转载自:http://blog.csdn.net/ahhsxy/article/details/7356128 这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下 ...
- [LeetCode] 21. Merge Two Sorted Lists ☆
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- MongoDB入门(7)- SpringDataMongoDB
入门 本文介绍如何应用SpringDataMongoDB操作实体和数据库,本文只介绍最基本的例子,复杂的例子在后面的文章中介绍. SpringDataMongoDB简介 SpringDataMongo ...
- [Luogu 1160] 队列安排
Luogu 1160 队列安排 链表H2O H2O H2O模板. 太久不写链表,忘干净了,竟调了半个晚上. 保留备用. #include <cstdio> #include <cst ...
- python3 mysql 时间参数错误
一.环境 mac OS + python3.6 + pymysql 二.执行 1.语句 select count(user_id) from chezhubangapppp.yfq_user wher ...
- Ajax请求Spring Mvc 时总是返回 302 Moved Temporarily
功能上主要是实现在前台点击保存按钮,单元格变成文本框,修改值后请求后台保存数据.但在做的过程中,ajax 请求总是不能请求到后.打开浏览器调试,查看到http状态码总是返回 http/1.1 302 ...
- 简单的异步HTTP服务端和客户端
/// <summary> /// 异步Http服务器 /// </summary> class AsyncHttpServer { readonly HttpListener ...
- 【Foreign】Uria [欧拉函数]
Uria Time Limit: 20 Sec Memory Limit: 512 MB Description 从前有个正整数 n. 对于一个正整数对 (a,b),如果满足 a + b ≤ n 且 ...
- 01背包入门 dp
题目引入: 有n个重量和价值分别为Wi,Vi的物品.从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中的价值总和的最大值. 分析: 首先,我们用最普通的方法,针对每个物品是否放入背包进行搜索. ...