1、创建MySQL数据库:mybatisDemo和表:user



2、建立一个Java工程,并导入相应的jar包,具体目录如下



3、在 MyBatisTest 工程中添加数据库配置文件 mybatis-configuration.xml


<?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标签,当mybatis和spring整合之后,这个标签是不用配置的 --><!-- 可以配置多个运行环境,但是每个 SqlSessionFactory 实例只能选择一个运行环境  一、development:开发模式二、work:工作模式--><environments default="development"><!--id属性必须和上面的default一样  --><environment id="development"><!--事务管理器一、JDBC:这个配置直接简单使用了 JDBC 的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围二、MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期比如 spring 或 JEE 应用服务器的上下文,默认情况下,它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,就可以将 closeConnection 属性设置为 false,比如:<transactionManager type="MANAGED"><property name="closeConnection" value="false"/></transactionManager>--><transactionManager type="JDBC"/><!--dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象源  --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments></configuration>

4、定义表所对应的实体类


package com.ys.po;import java.util.Date;public class User {private int id;private String username;private String sex;private Date birthday;private String address;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", sex=" + sex+ ", birthday=" + birthday + ", address=" + address + "]";}
}

5、定义操作 user 表的sql映射文件userMapper.xml  


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ys.po.userMapper"><!-- 根据 id 查询 user 表中的数据id:唯一标识符,此文件中的id值不能重复resultType:返回值类型,一条数据库记录也就对应实体类的一个对象parameterType:参数类型,也就是查询条件的类型--><select id="selectUserById"resultType="com.ys.po.User" parameterType="int"><!-- 这里和普通的sql 查询语句差不多,对于只有一个参数,后面的 #{id}表示占位符,里面不一定要写id,写啥都可以,但是不要空着,如果有多个参数则必须写pojo类里面的属性 -->select * from user where id = #{id}</select><!-- 查询 user 表的所有数据注意:因为是查询所有数据,所以返回的应该是一个集合,这个集合里面每个元素都是User类型--><select id="selectUserAll" resultType="com.ys.po.User">select * from user</select><!-- 模糊查询:根据 user 表的username字段下面两种写法都可以,但是要注意1、${value}里面必须要写value,不然会报错2、${}表示拼接 sql 字符串,将接收到的参数不加任何修饰拼接在sql语句中3、使用${}会造成 sql 注入--><select id="selectLikeUserName" resultType="com.ys.po.User" parameterType="String">select * from user where username like '%${value}%'<!-- select * from user where username like #{username} --></select><!-- 向 user 表插入一条数据 --><insert id="insertUser" parameterType="com.ys.po.User">insert into user(id,username,sex,birthday,address)value(#{id},#{username},#{sex},#{birthday},#{address})</insert><!-- 根据 id 更新 user 表的数据 --><update id="updateUserById" parameterType="com.ys.po.User">update user set username=#{username} where id=#{id}</update><!-- 根据 id 删除 user 表的数据 --><delete id="deleteUserById" parameterType="int">delete from user where id=#{id}</delete>
</mapper>

6、向 mybatis-configuration.xml 配置文件中注册 userMapper.xml 文件


mybatis-configuration.xml配置文件里面添加:

<mappers><!-- 注册userMapper.xml文件,userMapper.xml位于com.ys.mapper这个包下,所以resource写成com/ys/mapper/userMapper.xml--><mapper resource="com/ys/mapper/userMapper.xml"/>
</mappers>

7、创建测试类


package com.ys.test;import java.io.InputStream;
import java.util.List;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;import com.ys.po.User;public class CRUDTest {//定义 SqlSessionSqlSession session =null;@Beforepublic void init(){//定义mybatis全局配置文件String resource = "mybatis-configuration.xml";//加载 mybatis 全局配置文件InputStream inputStream = CRUDTest.class.getClassLoader().getResourceAsStream(resource);//构建sqlSession的工厂SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//根据 sqlSessionFactory 产生 sessionsession = sessionFactory.openSession();}//根据id查询user表数据@Testpublic void testSelectUserById(){/*这个字符串由 userMapper.xml 文件中 两个部分构成<mapper namespace="com.ys.po.userMapper"> 的 namespace 的值<select id="selectUserById" > id 值*/String statement = "com.ys.po.userMapper.selectUserById";User user = session.selectOne(statement, 1);System.out.println(user);session.close();}//查询所有user表所有数据@Testpublic void testSelectUserAll(){String statement = "com.ys.po.userMapper.selectUserAll";List<User> listUser = session.selectList(statement);for(User user : listUser){System.out.println(user);}session.close();}//模糊查询:根据 user 表的username字段@Testpublic void testSelectLikeUserName(){String statement = "com.ys.po.userMapper.selectLikeUserName";List<User> listUser = session.selectList(statement, "%t%");for(User user : listUser){System.out.println(user);}session.close();}//向 user 表中插入一条数据@Testpublic void testInsertUser(){String statement = "com.ys.po.userMapper.insertUser";User user = new User();user.setUsername("Bob");user.setSex("女");session.insert(statement, user);//提交插入的数据session.commit();session.close();}//根据 id 更新 user 表的数据@Testpublic void testUpdateUserById(){String statement = "com.ys.po.userMapper.updateUserById";//如果设置的 id不存在,那么数据库没有数据更改User user = new User();user.setId(4);user.setUsername("jim");session.update(statement, user);session.commit();session.close();}//根据 id 删除 user 表的数据@Testpublic void testDeleteUserById(){String statement = "com.ys.po.userMapper.deleteUserById";session.delete(statement,4);session.commit();session.close();}
}

总结:


①、parameterType:指定输入参数的类型

  ②、resultType:指定输出结果的类型,在select中如果查询结果是集合,那么也表示集合中每个元素的类型

  ③、#{}:表示占位符,用来接收输入参数,类型可以是简单类型,pojo,HashMap等等

    如果接收简单类型,#{}可以写成 value 或者其他名称

    如果接收 pojo 对象值,通过 OGNL 读取对象中的属性值,即属性.属性.属性...的方式获取属性值

  ④、${}:表示一个拼接符,会引起 sql 注入,不建议使用  

    用来接收输入参数,类型可以是简单类型,pojo,HashMap等等

    如果接收简单类型,${}里面只能是 value

    如果接收 pojo 对象值,通过 OGNL 读取对象中的属性值,即属性.属性.属性...的方式获取属性值

mybatis基于XML(二)相关推荐

  1. Mybatis-06【MyBatis基于XML的详细使用——缓存】

    MyBatis基于XML的详细使用--缓存1.介绍2.一级缓存的使用3.二级缓存1. 缓存的使用2. 缓存的属性3. 二级缓存的作用范围4. 整合第三方缓存 1.介绍 MyBatis 内置了一个强大的 ...

  2. Mybatis基于XML配置SQL映射器(二)

    Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档  sysUse ...

  3. Mybatis基于XML配置SQL映射器(一)

    Durid和Mybatis开发环境搭建 SpringBoot搭建基于Spring+SpringMvc+Mybatis的REST服务(http://www.cnblogs.com/nbfujx/p/76 ...

  4. SpringBoot+MyBatis 基于xml实现多表查询的两种方式

    1.创建SpringBoot项目,导入依赖 <dependencies><dependency><groupId>org.springframework.boot& ...

  5. spring整合mybatis基于xml配置

    数据库 /* Navicat MySQL Data Transfer Source Server         : mysql Source Server Version : 50549 Sourc ...

  6. MyBatis基于XML的使用——缓存

    1.介绍 MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地 配置和定制. 为了使它更加强大而且易于配置,我们对 MyBatis 3 中的缓存实现进行了许多改进. 默认情况下,只启用 ...

  7. mybatis笔记-04【MyBatis基于XML的详细使用——高级结果映射】

    1.联合查询 emp.java 1 package cn.tulingxueyuan.pojo; 2 3 import java.time.LocalDate; 4 5 /*** 6 * @Autho ...

  8. MyBatis基于XML的详细使用——缓存

    目录 介绍 一级缓存的使用 特性 二级缓存 缓存的使用 缓存的属性 二级缓存的作用范围: 特性 介绍 MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制. 为了使它更加强大 ...

  9. MyBatis框架基于XML配置文件开发

    MyBatis框架基于XML配置文件开发 本文内容涉及MyBatis框架开发的传参,多表查询,结果封装: 说明: 当前使用的是mysql数据库, 测试在maven工程下: 数据库表: book表: k ...

最新文章

  1. windows下expdp自动备份脚本
  2. 31天重构学习笔记重新整理下载
  3. vscode 这是一个好同志
  4. 辅助的写与数据库交互的XML文件的类
  5. leetcode348. 判定井字棋胜负 好麻烦的代码
  6. HDU-Largest Rectangle in a Histogram-1506 单调栈
  7. 零零散散学算法之再叙字符串匹配
  8. css背景透明度不影响文字_唯美文字背景图 | 生活不一定很酷
  9. Shp上传至Oracle Spatial
  10. C# fmpeg加虹软的人脸识别demo
  11. Windows 在Windows中关闭/最小化窗口的几种快捷方法
  12. sqli-labs(38-41)
  13. Android root检测方法小结
  14. 如何查看IE浏览器的版本
  15. SecureCRT for Linux
  16. Python-冒泡排序函数
  17. 2022A特种设备相关管理(电梯)复训题库及模拟考试
  18. CloudDrive不能用了还有其他方法么
  19. 链接分析算法PageRank和HITS
  20. 不懂甘特图,你还怎么做项目进度管理

热门文章

  1. Java反射机制涉及的类常见方法使用总结
  2. kafka 多线程消费
  3. 第一课 第二节 集成开发环境
  4. js-sdk探索之微信网页分享
  5. C#读取文本文件和C# 写文本文件
  6. java sha1hash 算法_javaweb使用sha1算法登录加密的整个过程
  7. 在计算机网络应用发展过程中 被称为,计算机网络技术与应用第三章考试题
  8. 灵感库 | 让设计师欲罢不能的设计网站
  9. C4D立体风格海报素材|电商万能套用BANNER是美工必收藏
  10. 最火UI素材|短视频、直播APP套件,轻松搞定设计