1.CRUD的含义

CRUD是指在做计算处理时的增加(Create)、读取(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。

2.URL的概念及含义

URL:Uniform Resource Locator 统一资源定位符。它是可以唯一标识一个资源的位置。
它的写法:
http://localhost:8080/mybatisserver/demo1Servlet
协议 主机    端口    URI

URI:Uniform Resource Identifier 统一资源标识符。它是在应用中可以唯一定位一个资源的。

3.Mybatis的CRUD操作

数据库表结构图:

数据库对应的实体类User.java

  1. package domain;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Date;
  5.  
  6. /**
  7. * 数据库表对应的实体类
  8. */
  9. public class User implements Serializable {
  10. //实体类的成员变量名称应该与数据库中的列名一致
  11. private Integer id;
  12. private String username;
  13. private Date birthday;
  14. private String sex;
  15. private String address;
  16.  
  17. public Integer getId() {
  18. return id;
  19. }
  20.  
  21. public void setId(Integer id) {
  22. this.id = id;
  23. }
  24.  
  25. public String getUsername() {
  26. return username;
  27. }
  28.  
  29. public void setUsername(String username) {
  30. this.username = username;
  31. }
  32.  
  33. public Date getBirthday() {
  34. return birthday;
  35. }
  36.  
  37. public void setBirthday(Date birthday) {
  38. this.birthday = birthday;
  39. }
  40.  
  41. public String getSex() {
  42. return sex;
  43. }
  44.  
  45. public void setSex(String sex) {
  46. this.sex = sex;
  47. }
  48.  
  49. public String getAddress() {
  50. return address;
  51. }
  52.  
  53. public void setAddress(String address) {
  54. this.address = address;
  55. }
  56.  
  57. @Override
  58. public String toString() {
  59. return "User{" +
  60. "id=" + id +
  61. ", username='" + username + '\'' +
  62. ", birthday=" + birthday +
  63. ", sex='" + sex + '\'' +
  64. ", address='" + address + '\'' +
  65. '}';
  66. }
  67. }

IUserDao.java数据库表操作实现接口

  1. package dao;
  2.  
  3. import domain.QueryConditon;
  4. import domain.User;
  5. import org.apache.ibatis.annotations.Delete;
  6. import org.apache.ibatis.annotations.Insert;
  7. import org.apache.ibatis.annotations.Select;
  8. import org.apache.ibatis.annotations.Update;
  9. import org.junit.Test;
  10.  
  11. import java.util.List;
  12.  
  13. /**
  14. *
  15. */
  16. public interface IUserDao {
  17. /**
  18. * 查询所有
  19. * @return
  20. */
  21. //注解模式
  22. @Select("select *from user")
  23. List<User> findAll();
  24.  
  25. /**
  26. * 保存用户
  27. * @param user
  28. */
  29. @Insert("insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})")
  30. void saveUser(User user);
  31.  
  32. /**
  33. * 更新操作
  34. * @param user
  35. */
  36. @Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}")
  37. void updateUser(User user);
  38.  
  39. /**
  40. * 删除操作
  41. * @param userId 用户id
  42. */
  43. @Delete("delete from user where id=#{userId}")
  44. void deleteUser(Integer userId);
  45.  
  46. /**
  47. * 根据用户id查询
  48. * @param userId 用户id
  49. */
  50. @Select("select * from user where id=#{userId}")
  51. User queryById(Integer userId);
  52.  
  53. /**
  54. * 根据用户名进行模糊查询
  55. * @param username 用户名
  56. * @return 查询结果
  57. */
  58. @Select("select *from user where username like #{username} ")
  59. List<User> queryByName(String username);
  60.  
  61. /**
  62. * 获取用户的总记录数
  63. * @return
  64. */
  65. @Select("select count(id) from user")
  66. int queryTotalCount();
  67.  
  68. /**
  69. * 根据查询条件对象(由实体类生成)进行查询
  70. * @param queryConditon 查询条件
  71. * @return
  72. */
  73. @Select("select *from user where username like #{user.username} and sex like #{user.sex}")
  74. List<User> queryByQueryConditionObject(QueryConditon queryConditon);
  75. }

测试类

  1. package test;
  2.  
  3. import dao.IUserDao;
  4. import domain.QueryConditon;
  5. import domain.User;
  6. import org.apache.ibatis.io.Resources;
  7. import org.apache.ibatis.session.SqlSession;
  8. import org.apache.ibatis.session.SqlSessionFactory;
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  10. import org.junit.Test;
  11.  
  12. import java.io.InputStream;
  13. import java.util.Date;
  14. import java.util.List;
  15.  
  16. public class MybatisTest01 {
  17.  
  18. private InputStream in;
  19. private SqlSession sqlSession;
  20. private IUserDao userDao;
  21.  
  22. /**
  23. * 初始化MyBatis
  24. * @throws Exception
  25. */
  26. public void initMyBatis() throws Exception{
  27. //1.读取配置文件
  28. in = Resources.getResourceAsStream("SqlMapConfig.xml");
  29. //2.创建SqlSessionFactory
  30. SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); //创建SqlSessionFactory的构建者builder
  31. SqlSessionFactory factory=builder.build(in); //利用构建者builder创建SqlSessionFactory
  32. //3.使用工厂生产SqlSession对象
  33. sqlSession = factory.openSession();
  34. //4.使用SqlSessions对象创建Dao接口的代理对象
  35. userDao = sqlSession.getMapper(IUserDao.class);
  36. }
  37.  
  38. /**
  39. * 释放资源
  40. * @throws Exception
  41. */
  42. public void destroy() throws Exception{
  43. sqlSession.commit();//提交事务
  44. sqlSession.close();
  45. in.close();
  46. }
  47.  
  48. /**
  49. * 查询所有
  50. */
  51. @Test
  52. public void testQueryAll() throws Exception{
  53.  
  54. initMyBatis();
  55. //5.使用代理对象执行方法
  56. List<User> users = userDao.findAll();
  57. for (User user : users) {
  58. System.out.println(user);
  59. }
  60. destroy();
  61. }
  62.  
  63. /**
  64. * 测试保存操作
  65. * @throws Exception
  66. */
  67. @Test
  68. public void testSave() throws Exception{
  69. User user=new User();
  70. user.setUsername("lucky");
  71. user.setAddress("天台");
  72. user.setBirthday(new Date());
  73. user.setSex("男");
  74.  
  75. initMyBatis();
  76. //5.使用代理对象执行方法
  77. userDao.saveUser(user);
  78.  
  79. destroy();
  80. }
  81.  
  82. /**
  83. * 测试更新操作
  84. * @throws Exception
  85. */
  86. @Test
  87. public void testUpdate() throws Exception{
  88. User user=new User();
  89. user.setId(49);
  90. user.setUsername("lucky");
  91. user.setAddress("浙江天台");
  92. user.setBirthday(new Date());
  93. user.setSex("男");
  94.  
  95. initMyBatis();
  96. //5.使用代理对象执行方法
  97. userDao.updateUser(user);
  98.  
  99. destroy();
  100. }
  101.  
  102. /**
  103. * 测试更新操作
  104. * @throws Exception
  105. */
  106. @Test
  107. public void testDelete() throws Exception{
  108.  
  109. initMyBatis();
  110. //5.使用代理对象执行方法
  111. userDao.deleteUser(48);
  112. destroy();
  113. }
  114.  
  115. /**
  116. * 测试查询一个的方法
  117. * @throws Exception
  118. */
  119. @Test
  120. public void testQueryOne()throws Exception{
  121. initMyBatis();
  122. //5.使用代理对象执行方法
  123. User user=userDao.queryById(49);
  124. System.out.println(user);
  125. destroy();
  126. }
  127.  
  128. /**
  129. * 模糊查询
  130. * @throws Exception
  131. */
  132. @Test
  133. public void testQueryByName()throws Exception{
  134. initMyBatis();
  135. //5.使用代理对象执行方法
  136. List<User> users = userDao.queryByName("%ck%");
  137. for (User user : users) {
  138. System.out.println(user);
  139. }
  140. destroy();
  141. }
  142.  
  143. /**
  144. * 查询总记录数
  145. * @throws Exception
  146. */
  147. @Test
  148. public void testQueryTotalCount()throws Exception{
  149. initMyBatis();
  150. //5.使用代理对象执行方法
  151. int totalCount = userDao.queryTotalCount();
  152. System.out.println(totalCount);
  153. destroy();
  154. }
  155.  
  156. /**
  157. * 根据查询条件实体类对象进行查询
  158. * @throws Exception
  159. */
  160. @Test
  161. public void testQueryConditionObject()throws Exception{
  162. initMyBatis();
  163. QueryConditon queryConditon=new QueryConditon(); //创建查询条件实体类
  164. User user=new User();
  165. user.setUsername("%王%"); //查询条件1:名字包含王
  166. user.setSex("女"); //性别为女
  167. queryConditon.setUser(user); //将查询条件封装到查询条件实体类QueryConditon中
  168. //5.使用代理对象执行方法
  169. List<User> users = userDao.queryByQueryConditionObject(queryConditon);
  170. for (User user1 : users) {
  171. System.out.println(user1);
  172. }
  173. destroy();
  174. }
  175.  
  176. }

4.Mybatis连接池

(1)连接池综述:
  我们在实际开发中都会使用连接池。
  因为它可以减少我们获取连接所消耗的时间。


(2)mybatis中的连接池
mybatis连接池提供了3种方式的配置:
配置的位置:
  主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。
  type属性的取值:
    POOLED    采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
    UNPOOLED    采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
    JNDI                采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。
                 注意:如果不是web或者maven的war工程,是不能使用的。
            我们课程中使用的是tomcat服务器,采用连接池就是dbcp连接池。

05 Mybatis的CRUD操作和Mybatis连接池的更多相关文章

  1. 【MyBatis】MyBatis实现CRUD操作

    1.实现基本CRUD功能 使用MyBatis对数据完整的操作,也就是CRUD功能的实现.根据之前的内容,要想实现CRUD,只需要进行映射文件的配置. 范例:修改EmpMapper.xml文件,实现CR ...

  2. mybatis深入之动态查询和连接池介绍

    mybatis深入之动态查询和连接池介绍 一.mybatis条件查询 在mybatis前述案例中,我们的查询条件都是确定的.但在实际使用的时候,我们的查询条件有可能是动态变化的.例如,查询参数为一个u ...

  3. java操作mongodb(连接池)(转)

    原文链接: java操作mongodb(连接池) Mongo的实例其实就是一个数据库连接池,这个连接池里默认有10个链接.我们没有必要重新实现这个链接池,但是我们可以更改这个连接池的配置.因为Mong ...

  4. Java操作数据库——使用连接池连接数据库

    Java操作数据库——使用连接池连接数据库 摘要:本文主要学习了如何使用JDBC连接池连接数据库. 传统方式和连接池方式 传统方式的步骤 使用传统方式在Java中使用JDBC连接数据库,完成一次数据库 ...

  5. 数据库CRUD操作以及MyBatis的配置使用

    • 业务字段设计 • 数据库创建 • CRUD操作 • MyBatis集成 • 注解和XML定义 • ViewObject和DateTool • 首页开发     • 业务字段设计 实体: name: ...

  6. Mybatis基于代理Dao实现CRUD操作 及 Mybatis的参数深入

    Mybatis基于代理Dao实现CRUD操作 使用要求: 1.持久层接口和持久层接口的映射配置必须在相同的包下 2.持久层映射配置中mapper标签的namespace属性取值必须是持久层接口的全限定 ...

  7. Spring boot 入门四:spring boot 整合mybatis 实现CRUD操作

    开发环境延续上一节的开发环境这里不再做介绍 添加mybatis依赖 <dependency> <groupId>org.mybatis.spring.boot</grou ...

  8. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  9. java操作redis redis连接池

    redis作为缓存型数据库,越来越受到大家的欢迎,这里简单介绍一下java如何操作redis. 1.java连接redis java通过需要jedis的jar包获取Jedis连接. jedis-2.8 ...

随机推荐

  1. 02-Flutter移动电商实战-建立项目和编写入口文件

    环境搭建请参考之前写的一篇文章:Flutter_初体验_创建第一个应用 1.创建项目 采用AndroidStudio构建本项目,FIle>New>New Flutter Project… ...

  2. [Javascript] Check Promise is Promise

    const isPromise = obj => Boolean(obj) && typeof obj.then === 'function'; This can be a to ...

  3. area标签的使用,图片中某一个部分可以点击跳转,太阳系中点击某个行星查看具体信息

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. leetcode 一些算法题及答案

    1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...

  5. 用pandas进行数据清洗(二)(Data Analysis Pandas Data Munging/Wrangling)

    在<用pandas进行数据清洗(一)(Data Analysis Pandas Data Munging/Wrangling)>中,我们介绍了数据清洗经常用到的一些pandas命令. 接下 ...

  6. 【luoguP2999】 [USACO10NOV]巧克力牛奶Chocolate Milk

    题目链接 考虑每条路径都经过的一个点,它可以到达每个出度为零点(终点),且每个入读为零点(起点)都能到达它, 拓扑排序记录下每个结点能到达的出度为零点的个数和沿反边能到达的入读为零点个数,判断是否等于 ...

  7. 群晖采用root用户登录

    在控制面板中开启 ssh 登录 通过有 管理员权限的用户登录 通过输入 sudo -i 或者 sudo su - , 然后输入当前用户密码, 进入 root 输入如下命令可以修改root 用户的密码 ...

  8. java基础-数据输入

    import java.util.Scanner; public class ScannerTest { public static void main(String[] args) { //身高未知 ...

  9. Ajax 的一些概念 解析

    什么是Ajax Ajax基本概念 Ajax(Asynchronous JavaScript and XML):翻译成中文就是异步的JavaScript和XML. 从功能上来看是一种在无需重新加载整个网 ...

  10. pdfBox 解析 pdf文件

    Spting boot 项目 1.添加依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifa ...