1 Mybatis
1 使用Maven导入mybatis依赖
在pom.xml中写上一下代码:这些代码的查找可在https://mvnrepository.com/open-source网站上寻找,导入mybatis时要注意导入mysql还有版本的控制做到相适应。
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
有一点要注意的是mysql在6.0以上版本有改动优化,因为视频中出现的是2017年所以遵守视频中的版本。
2 mybatis开发流程
创建配置mybatis-config.xml配置文件-->>>创建db.properties配置文件配置数据库参数--->>>创建实体类--->>>在resource中创建mapper文件夹并在下面创建usersMapper.xml映射文件,在里面编写查询语句--->>>创建监听器和sqlSession工具类--->>>创建UsesDao编写查询方法--->>>创建Servlet编写增删改查。整体结构如下图所示

3 动态SQL语句
在userMapper.xml文件中编写的sql代码:
<!--
mapper 用于定义一个映射配置文件的根节点
namespace属性是用来配置命名空间,主要进行session级别的缓存管理
命名空间默认情况下,使用我们当前操作的实体类的全路径
-->
<mapper namespace="cn.uestc.entity.Users">
<select id="findUsers" resultType="cn.uestc.entity.Users">
select * from users
</select>
<select id="findById" resultType="cn.uestc.entity.Users">
select * from users where id = #{id}
</select>
</mapper>
在UsersDAO中相对映:通过相匹配select中的id来匹配具体调用哪一个查询语句
public List<Users> findAll() {
try {
list = getSession().selectList("findUsers");
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return list;
}
/**
* 查询单个用户根据编号
* @return
*/
public Users findById(Integer id) {
try {
user = getSession().selectOne("findById", id);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return user;
}
但这样做有很大的局限性,当我们要查询的情况发生改变时就要增加一个查询语句,当要查询的情况比较多时查询语句也会不断的增加,这样使得代码越来越难以管理,因此推出动态SQL语句使得查询语句可以动态发生改变。下面一段代码就直接代替了上面的两种查询情况:
<mapper namespace="cn.uestc.entity.Users">
<select id="findUsers" resultType="cn.uestc.entity.Users">
select * from users
<if test="id != null">
where id = #{id}
</if>
</select>
</mapper>
此时要注意#{id}有两种获取方法:HashMap和JavaBean,当select中的id和查询方法一对应时是通过map集合获取的,但在此时一个id="findUsers"对应着两个不同的方法那么此时就无法通过map集合获得了而要通过JavaBean,但在实体类中已经有id的get、set方法为什么不对那,那是因为在传递参数的时候直接传入了id,而采用JavaBean获取值时是通过对象获得的,即namespace中的对象类型,也就意味着此时要传递一个对象方可,那么有两种方法:
public Users findById(Integer id) {
user.setId(id);
try {
user = getSession().selectOne("findUsers", user);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return user;
}
或者 上面一种方法需要先new 一个对象但是不用再创建构造方法,下面的方法直接利用有参构造,需要先有对应的构造方法
public Users findById(Integer id) {
user.setId(id);
try {
user = getSession().selectOne("findUsers", new Users(id));
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return user;
}
0
1 Mybatis的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- mybatis plugins实现项目【全局】读写分离
在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...
- MyBatis基础入门--知识点总结
对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- MyBatis源码分析(一)开篇
源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...
- (整理)MyBatis入门教程(一)
本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...
- MyBatis6:MyBatis集成Spring事物管理(下篇)
前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...
随机推荐
- 【洛谷】P4202 [NOI2008]奥运物流
[洛谷]P4202 [NOI2008]奥运物流 感觉有点降智 首先设环长为\(len\),很容易推导出 \[ R(1) = \frac{\sum_{i = 1}^{N} C_{i} k^{dep[i] ...
- 注解@PostConstruct与@PreDestroy详解及实例
Java EE5 引入了@PostConstruct和@PreDestroy这两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作.此文主要说明@PostConstru ...
- XML文件介绍
xml基础详解 1.概述: xml:即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网的任何平台,不受编程语言和操作系统的限制,可以说他是一个拥有互联网最高级别通行证的数据携带者.x ...
- 封装PHP增删改查方法
<?php class sqlModel{ public $db; public function __construct(){ try{ $dbms='mysql';//数据库类型 $dbNa ...
- Antd中,Form和Select联合使用,导致placeholder不生效分析
在使用antd的form组件时候,需要对Select组件进行语体示,placeholder,但是写的值并不生效 效果如上,但是现实的时候不生效,经检查发现,组件需要传递的是undefined,如果传入 ...
- WEB监控系列第三篇:graphite指南
一 使用说明 以下是喂数据的方式,但是在实际使用中我们使用statsd来喂数据,请参考我的第四篇文章:statsd指南 喂数据有三种方式: There are three main methods ...
- Spring HttpServletRequest对象的获取
1.Controller方法上获取 @RequestMapping(value = "/aliyun/ccc/callComing", method = RequestMethod ...
- VBA开发项目分享-1
这个项目的目的是使用VBA制作一个股票筛选器,股票的指标数据存放在多个工作表,输入多个指标的查询条件,可以从相应的工作表里查询出符合条件的股票数据并返回.项目涉及的VBA知识结构有字典.数组.OLED ...
- Js setTimeout 用法
setTimeout( ) 是属于 window 的 method, 但我们都是略去 window 这顶层物件名称, 这是用来设定一个时间, 时间到了, 就会执行一个指定的 method. setTi ...
- 【转】Fetch超时设置和终止请求
原文链接:https://www.cnblogs.com/yfrs/p/fetch.html 1.基本使用 Fetch 是一个新的端获取资源的接口,用于替换笨重繁琐XMLHttpRequest.它有了 ...