使用Mybatis完成的CRUD操作

个人总结的一些小规律

学习过程中碰到的错误:

  1. org.apache.ibatis.exceptions.PersistenceException:
  2. ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

虽然报错信息提示的 很明显是sql语法报错,不过我一时之间没有没有看出sql语句错在哪里,后来才发现是插入sql语句的括号写错了,不是小括号,而是大括号

  1. 错误写法:insert into user(username,address,sex,birthday)value(#(username),#(address),#(sex),#(birthday);
  2. 正确写法:insert into user(username,address,sex,birthday)value(#{username},#{address},#{sex},#{birthday});

JavaBean类

  1. package com.itheima.domain;
  2. import java.io.Serializable;
  3. import java.util.Date;
  4. public class User implements Serializable {
  5. private Integer id;
  6. private String username;
  7. private String address;
  8. private String sex;
  9. private Date birthday;
  10. public Integer getId() {
  11. return id;
  12. }
  13. public void setId(Integer id) {
  14. this.id = id;
  15. }
  16. public String getUsername() {
  17. return username;
  18. }
  19. public void setUsername(String username) {
  20. this.username = username;
  21. }
  22. public String getAddress() {
  23. return address;
  24. }
  25. public void setAddress(String address) {
  26. this.address = address;
  27. }
  28. public String getSex() {
  29. return sex;
  30. }
  31. public void setSex(String sex) {
  32. this.sex = sex;
  33. }
  34. public Date getBirthday() {
  35. return birthday;
  36. }
  37. public void setBirthday(Date birthday) {
  38. this.birthday = birthday;
  39. }
  40. @Override
  41. public String toString() {
  42. return "User{" +
  43. "id=" + id +
  44. ", username='" + username + '\'' +
  45. ", address='" + address + '\'' +
  46. ", sex='" + sex + '\'' +
  47. ", birthday=" + birthday +
  48. '}';
  49. }
  50. }

dao层

  1. package com.itheima.dao;
  2. import com.itheima.domain.User;
  3. import java.util.List;
  4. public interface IUserDao {
  5. //查询所有用户
  6. List<User> findAll();
  7. //保存用户
  8. void saveUser(User user);
  9. //更新用户
  10. void updateUser(User user);
  11. //根据id删除用户
  12. void deleteUser(Integer userId);
  13. //查询一个,根据id查询用户信息
  14. User findById(Integer userId);
  15. //根据名称模糊查询用户信息
  16. List<User> findByName(String username);
  17. //查询总用户数
  18. int findTotal();
  19. }

配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.itheima.dao.IUserDao">
  6. <!--查询所有用户-->
  7. <select id="findAll" resultType="com.itheima.domain.User">
  8. select * from user;
  9. </select>
  10. <!--保存用户-->
  11. <insert id="saveUser" parameterType="com.itheima.domain.User">
  12. <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
  13. select last_insert_id();
  14. </selectKey>
  15. insert into user(username,address,sex,birthday)value(#{username},#{address},#{sex},#{birthday});
  16. </insert>
  17. <!--更新用户-->
  18. <update id="updateUser" parameterType="com.itheima.domain.User">
  19. update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
  20. </update>
  21. <!--删除用户-->
  22. <delete id="deleteUser" parameterType="Integer">
  23. delete from user where id=#{id}
  24. </delete>
  25. <!--根据id查询用户-->
  26. <select id="findById" parameterType="Integer" resultType="com.itheima.domain.User">
  27. select * from user where id = #{uid}
  28. </select>
  29. <!--根据名称模糊查询-->
  30. <select id="findByName" parameterType="String" resultType="com.itheima.domain.User">
  31. select * from user where username like #{name}
  32. </select>
  33. <select id="findTotal" resultType="int">
  34. select count(id) from user;
  35. </select>
  36. </mapper>

测试类

  1. package com.itheima.test;
  2. import com.itheima.dao.IUserDao;
  3. import com.itheima.domain.User;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import org.junit.After;
  9. import org.junit.Before;
  10. import org.junit.Test;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.util.Date;
  14. import java.util.List;
  15. public class MybatisTest {
  16. private InputStream in;//读取配置文件
  17. private SqlSession sqlSession;//操作数据库
  18. private IUserDao userDao;
  19. @Before//用于在测试方法执行之前执行,在其他方法执行之前执行init方法
  20. public void init() throws IOException {
  21. //读取配置文件,生成字节输入流
  22. in = Resources.getResourceAsStream("SqlMapConfig.xml");
  23. //获取SqlSessionFactory
  24. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
  25. //获取sqlSession对象
  26. sqlSession = factory.openSession();
  27. //获取dao的代理对象
  28. userDao = sqlSession.getMapper(IUserDao.class);
  29. }
  30. @After//用于测试方法执行之后执行
  31. public void destroy() throws IOException {
  32. //提交事务
  33. sqlSession.commit();
  34. //释放资源
  35. sqlSession.close();
  36. in.close();
  37. }
  38. @Test
  39. //查询所有用户
  40. public void testFindAll() throws IOException {
  41. //执行查询方法
  42. List<User> users = userDao.findAll();
  43. for(User user:users){
  44. System.out.println(user);
  45. }
  46. }
  47. @Test
  48. //保存用户
  49. public void testSave(){
  50. User user = new User();
  51. user.setUsername("王五");
  52. user.setAddress("北京市");
  53. user.setSex("男");
  54. user.setBirthday(new Date());
  55. System.out.println("保存前"+user);
  56. //执行保存方法
  57. userDao.saveUser(user);
  58. System.out.println("保存后"+user);
  59. }
  60. @Test
  61. //更新用户
  62. public void testUpdate(){
  63. User user = new User();
  64. user.setId(50);
  65. user.setUsername("李四");
  66. user.setAddress("北京市");
  67. user.setSex("男");
  68. user.setBirthday(new Date());
  69. //执行查询方法
  70. userDao.updateUser(user);
  71. }
  72. @Test
  73. //删除用户
  74. public void testDelete(){
  75. userDao.deleteUser(48);
  76. }
  77. @Test
  78. //查询一个用户
  79. public void testFindOne(){
  80. User user = userDao.findById(48);
  81. System.out.println(user);
  82. }
  83. @Test
  84. //查询一个用户
  85. public void testFindByName(){
  86. List<User> users = userDao.findByName("%王%");
  87. for(User user :users){
  88. System.out.println(user);
  89. }
  90. }
  91. @Test
  92. //查询一个用户
  93. public void testFindTotal(){
  94. int count = userDao.findTotal();
  95. System.out.println(count);
  96. }
  97. }

typeAliases标签和Package标签

  1. <!--使用typeAliases配置别名,他只能配置domain中类的别名-->
  2. <typeAliases>
  3. <!--typeAlias用于配置别名,type属性指定的是实体类权限定类名 alias属性指定别名,当指定了别命,不再区分大小写-->
  4. <!--<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>-->
  5. <!--用于指定配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写-->
  6. <package name="com.itheima.domain"></package>
  7. </typeAliases>
  1. <mappers>
  2. <!--<mapper resource="com/itheima/dao/IUserDao.xml"></mapper>-->
  3. <!--package标签是用于指定dao接口所在的包,当指定了之后就不需要在写mapper以及resource或者class了-->
  4. <package name="com.itheima.dao"></package>
  5. </mappers>

mybatis连接池的分类

连接池:我们在实际开发中都会使用连接池,因为他可以减少我们获取连接所消耗的时间

mybatis中的连接池

mybatis连接池提供了3种方式的配置:

配置的位置:主配置文件SqlMapConfig.xml的dataSource标签,type属性就是表示采用何种连接池方式

type属性的取值有三种

1.POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现

2.UNPOOLED 采用的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想

3.采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样的,如果不是web或者maven的war工程,是不能使用的(tomcat服务器,采用连接池就是dbcp连接池)

Mybatis笔记2的更多相关文章

  1. Mybatis笔记二:接口式编程

    目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...

  2. MyBatis笔记二:配置

    MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...

  3. MyBatis笔记一:GettingStart

    MyBatis笔记一:GettingStart 1.MyBatis优点 我们的工具和各种框架的作用就是为了我们操作数据库简洁,对于一些数据库的工具能帮我们少写一些处理异常等等的代码,但是他们并不是自动 ...

  4. 【MyBatis笔记】mapper文件的配置以及说明

    <!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...

  5. mybatis笔记2 基础理论准备

    之前发了一篇mybatis的crud入门笔记,算是入门了,为了让功力加深一级,来研究下mybatis的理论知识,哈哈,以后好拿来跟技术经理吹吹牛- 按照问题来吧!个人觉得有自主意识,带着自己的问题来研 ...

  6. mybatis笔记<二> 整合spring

    mybatis与spring整合需要添加几个jar包,mybatis-spring, spring-context, spring-jdbc 1. spring ioc只要一个jar包就ok 2. 我 ...

  7. mybatis笔记<一> Demo

    mybatis作为一个orm互联网公司基本都在用,今天写个笔记.记录一下mybatis使用 参考官网:http://www.mybatis.org/mybatis-3/getting-started. ...

  8. 【狂神说】JAVA Mybatis 笔记+源码

    简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 ...

  9. mybatis笔记3 一些原理的理解

    1,mybatis流程跟踪,原理理解 基本思路: 从SqlSessionFactory的初始化出发,观察资源的准备和环境的准备,以及实现持久层的一些过程: 进入SqlSessionFactoryBea ...

  10. mybatis笔记1 基本的配置和操作

    mybatis比较轻量,适合开发比较小型的或者业务比较复杂的系统: 相对于hibernate来说可以灵活的写sql,更灵活的处理遇到的业务逻辑: 可以说hibernate是pojo实体对db的orm映 ...

随机推荐

  1. 查看windows操作系统的默认编码【转】

    在Windows平台下,进入DOS窗口,输入:chcp可以得到操作系统的代码页信息,你可以从控制面板的语言选项中查看代码页对应的详细的字符集信息. 例如: 我的活动代码页为:936,它对于的编码格式为 ...

  2. java使用递归遍历文件,使用内部类过滤文件,使用匿名内部类过滤文件

    public class TestFile { public static void main(String [] args) { //遍历文件夹中文件名称,若文件夹中还存有文件夹,递归读取文件夹名称 ...

  3. SQL Server 2012 无人值守安装

    方法1,通过指定条个參数安装   setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=install /PID=<validpid> /F ...

  4. vmWare安装centos7之后使用yum安装提示there are on enabled repos(修改yum源)

    可以使用这个命令修改yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.rep ...

  5. jqGrid怎样冻结指定的列

    第一步设置colModel  列内的 frozen: true: 第二步设置表格初始时宽度 shrinkToFit: false, 第三步设置  $gridTable.jqGrid('setFroze ...

  6. Acunetix Web Vulnerability Scanner abbr. AWVS

    awvs 中文手册详细版 - 木讷 - 博客园https://www.cnblogs.com/iamver/p/7124718.html Download Acunetix Trialhttps:// ...

  7. jenkins持续集成springboot

    1.可以配置项目标签 PS:这里Default Value值修改为master 2.代码地址,这里并没有拉取制定标签的代码,而是拉取了最新版本代码,如果要拉取指定标签代码需要把*/master修改成$ ...

  8. c++异常——学习笔记

    1.异常 throw抛出字符串 最好的是:throw抛出对象. catch(...){} 2.使用标准异常类 #include<new> bitset 自己写一个异常 设计自己异常类 堆栈 ...

  9. 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍

    笔记 1.SpringBoot2.x持久化数据方式介绍          简介:介绍近几年常用的访问数据库的方式和优缺点 1.原始java访问数据库             开发流程麻烦        ...

  10. Windows任务栏遮挡

    通过MSTSC远程桌面连接,远程的电脑桌面任务栏被本地的任务栏遮住了! 首先在本地的任务栏右键,选择任务管理器,选择正在运行的windows资源管理器进程,右键选择重新启动(R) OK,重启的Wind ...