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的更多相关文章

  1. Mybatis框架的多对一关联关系(六)

    一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...

  2. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  3. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  4. Hibernate框架与Mybatis框架的对比

    学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...

  5. 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)

    此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...

  6. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

  7. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  8. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  9. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...

  10. 详解Java的MyBatis框架中SQL语句映射部分的编写

    这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...

随机推荐

  1. 洛谷 P2800 又上锁妖塔

    https://www.luogu.org/problem/show?pid=2800 题目背景 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩& ...

  2. 「模板」AC自动机(ACAM)

    #include <algorithm> #include <cstdio> #include <cstring> #include <queue> u ...

  3. jQuery日历签到插件

    插件比较简单,先来看DEMO吧,http://codepen.io/jonechen/pen/bZWdXq: CSS部分: *{margin:0;padding:0;font:14px/1.8 &qu ...

  4. photoshop的魔棒工具怎么用来抠图

    魔棒工具是photoshop中提供的一种可以快速形成选区的工具,对于颜色边界分界明显的图片,能够一键形成选区,方便快捷. 本教程通过一个简单的实例,教新手怎么用Photoshop魔棒工具快速形成抠图选 ...

  5. 重复代码Duplicated Code---要重构的信号

    什么时候需要重构,当你在项目代码里面嗅到这个味道的时候,就要进行重构.   首个介绍的味道是重复代码的味道.   它表现出来的特征是这些:   1.一个类里面,两个函数中,含有相同的代码,类似的代码: ...

  6. 【BZOJ】1914: [Usaco2010 OPen]Triangle Counting 数三角形

    [题意]给定坐标系上n个点,求能构成的包含原点的三角形个数,n<=10^5. [算法]极角排序 [题解]补集思想,三角形个数为C(n,3)-不含原点三角形. 将所有点极角排序. 对于一个点和原点 ...

  7. 【BZOJ】1270 [BeijingWc2008]雷涛的小猫

    [算法]DP [题解]f1[i]表示第i棵树当前高度能得到的最多果子数 f2[i]表示高度i能得到的最多果子数. 于是有: f1[j]=max(f1[j],f2[i+delta])+mp[j][i]; ...

  8. 在前端发起ajax遇到问题

    1.请注意设置datatype的类型. 如下图:

  9. Mojo_1_第一个简单例子

    use Mojolicious::Lite; #根目录,Get方法打开 #正接显示文本text get '/' => sub{ my $service = shift; $service-> ...

  10. linux中的tasklet机制【转】

    转自:http://blog.csdn.net/yasin_lee/article/details/12999099 转自: http://www.kerneltravel.net/?p=143 中断 ...