user.java

package cn.itcast.mybatis.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 + "]";}}

uese.xml

<?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命名空间,为了分类管理sql语句,对sql语句进行隔离,方便管理 ,在后面采用mapper开发dao这种方式时使用namespace有特殊作用...
mapper代理开发时将namespace指定为mapper接口的全限定名-->
<mapper namespace="test">
<!-- 在mapper.xml文件中配置很多的sql语句,每个sql语句封装为一个MappedStatement对象
mapper.xml(就是这里的User.xml)--><!-- 根据id查询用户信息 --><!-- id:唯一标识 一个statement#{}:表示 一个占位符(?也表示一个占位符),如果#{}中传入简单类型的参数,#{}中的名称随意parameterType:输入 参数的类型,通过#{}接收parameterType输入 的参数resultType:输出结果 类型,不管返回是多条还是单条,指定单条的pojo类型--><select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">SELECT * FROM USER WHERE id= #{id}</select><!-- 根据用户名称查询用户信息,可能返回多条,模糊查询,${}:表示sql的拼接,通过${}接收参数,将参数的内容不加任何修饰拼接在sql中。--><select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">select * from user where username like '%${value}%'</select><!-- 添加用户parameterType:输入 参数的类型,User对象 包括 username,birthday,sex,address#{}是占位符可以把字符串的日期类型自动转换为Date类型#{}接收pojo数据,可以使用OGNL解析出pojo的属性值(OGNL对象导航语言,struts2可以使用OGNL,如果username是一个对象,则可以用#{username.name})#{username}表示从parameterType中获取pojo的属性值需求:user对象插入到数据库后,新记录的主键要通过user对象返回,这样就可以通过user获取主键值。解决思路:通过LAST_INSERT_ID()函数获取刚插入记录的自增主键值,selectKey:用于进行主键返回,里面定义了获取主键值的sql,在insert语句执行后,执行select LAST_INSERT_ID()就可以获取自增主键。order:设置selectKey中sql执行的顺序,相对于insert语句来说,AFTER就是在insert语句执行后执行select LAST_INSERT_ID()keyProperty:将主键值设置到User对象的哪个属性,resultType:select LAST_INSERT_ID()的结果 类型,就是要插入User对象的id属性的类型,如果User对象的id属性是string则这里就是String。--><insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"><selectKey keyProperty="id" order="AFTER" resultType="int">select LAST_INSERT_ID()    <!-- 这条语句可以直接在sqldevelop运行 --></selectKey>INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})</insert><!-- mysql的uuid生成主键 --><!-- <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"><selectKey keyProperty="id" order="BEFORE" resultType="string">select uuid()               <!-- 这条语句可以直接在sqldevelop运行</selectKey>INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert> --><!-- oracle在执行insert之前执行select 序列.nextval() from dual取出序列最大值((select 序列.nextval()得到oracle的序列值),将值设置到user对象 的id属性--><!-- <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"><selectKey keyProperty="id" order="BEFORE" resultType="int">select 序列.nextval() from dual        <!-- 这条语句可以直接在sqldevelop运行 --></selectKey>INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert> --><!-- 用户删除  --><delete id="deleteUser" parameterType="int">delete from user where id=#{id}</delete><!-- 用户更新 要求:传入的user对象中包括 id属性值--><update id="updateUser" parameterType="cn.itcast.mybatis.po.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update></mapper>

SqlMapConfig.xml

<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 属性定义加载一个properties文件在 properties标签 中配置属性值--><properties resource="db.properties"><!-- <property name="" value=""/> --></properties><!-- 定义 别名 --><typeAliases><!--单个别名的定义alias:别名,type:别名映射的类型  --><!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> --><!-- 批量别名定义指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写)--><package name="cn.itcast.mybatis.po"/></typeAliases><!-- 和spring整合后 environments配置将废除--><environments default="development"><environment id="development"><!-- 使用jdbc事务管理--><transactionManager type="JDBC" /><!-- 数据库连接池--><dataSource type="POOLED"><!-- 数据库连接参数 --><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--加载mapper映射如果将和spring整合后,可以使用整合包中提供的mapper扫描器,此处的mappers不用配置了。--><mappers><!-- resource是classpath,通过resource加载mapper的映射文件 --><mapper resource="sqlmap/User.xml" /><!-- <mapper resource="mapper/UserMapper.xml" /> --><!-- 通过class引用mapper接口 class:配置mapper接口全限定名要求:需要mapper.xml和mapper.java同名并且在一个目录 中--><!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --><!-- 批量mapper配置 通过package进行自动扫描包下边的mapper接口,要求:需要mapper.xml和mapper.java同名并且在一个目录 中--><package name="cn.itcast.mybatis.mapper"/></mappers></configuration>

Test.java

package cn.itcast.mybatis.first;import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;import org.apache.ibatis.io.Resources;
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 cn.itcast.mybatis.po.User;public class MybatisFirst {// 会话工厂private SqlSessionFactory sqlSessionFactory;// 创建工厂@Before        //before注解public void init() throws IOException {// 配置文件(SqlMapConfig.xml)String resource = "SqlMapConfig.xml";// 加载配置文件到输入 流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}// 测试根据id查询用户(得到单条记录)
    @Testpublic void testFindUserById() {// 通过sqlSessionFactory创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();// 通过sqlSession操作数据库// 第一个参数:statement的位置,等于namespace+statement的id// 第二个参数:传入的参数//返回userUser user = null;try {user = sqlSession.selectOne("test.findUserById", 2);} catch (Exception e) {e.printStackTrace();} finally {// 关闭sqlSession
            sqlSession.close();}System.out.println(user);}// 测试根据id查询用户(得到单条记录)
    @Testpublic void testFindUserByName() {// 通过sqlSessionFactory创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();// 通过sqlSession操作数据库// 第一个参数:statement的位置,等于namespace+statement的id// 第二个参数:传入的参数List<User> list = null;try {list = sqlSession.selectList("test.findUserByName", "小明");} catch (Exception e) {e.printStackTrace();} finally {// 关闭sqlSession
            sqlSession.close();}System.out.println(list.get(0).getUsername());}// 测试根据id查询用户(得到单条记录)
    @Testpublic void testInsertUser() {// 通过sqlSessionFactory创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();// 通过sqlSession操作数据库// 创建插入数据对象User user = new User();user.setUsername("浪子燕青");user.setAddress("河南郑州");user.setBirthday(new Date());user.setSex("1");try {sqlSession.insert("test.insertUser", user);// 因为没有设置成自动提交,所以需要提交事务,以后与spring 自动整合之后通过spring管理这些类就自动提交了。//调试的时候把myeclips编译好的控制台打印的sql语句放入sqlserver软件中进行手动调试
            sqlSession.commit();} catch (Exception e) {e.printStackTrace();} finally {// 关闭sqlSession
            sqlSession.close();}//打印主键,比如2个表关联,把副表插入数据库之后把外键插入主表中//不用<selectKey/>就没有主键id返回(此时id为null),//需求:user对象插入到数据库后,新记录的主键要通过user对象返回,这样就可以通过user获取主键值。System.out.println("用户的id=" + user.getId());}// 测试根据id删除用户(得到单条记录)
    @Testpublic void testDeleteUser() {// 通过sqlSessionFactory创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();// 通过sqlSession操作数据库try {sqlSession.delete("test.deleteUser", 35);// 需要提交事务
            sqlSession.commit();} catch (Exception e) {e.printStackTrace();} finally {// 关闭sqlSession
            sqlSession.close();}}// 测试根据id更新用户(得到单条记录)
    @Testpublic void testUpdateUser() {// 通过sqlSessionFactory创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();// 通过sqlSession操作数据库// 创建更新数据对象,要求必须包括 idUser user = new User();user.setId(35);user.setUsername("燕青");user.setAddress("河南郑州");
//        user.setBirthday(new Date());user.setSex("1");try {sqlSession.update("test.updateUser", user);// 需要提交事务
            sqlSession.commit();} catch (Exception e) {e.printStackTrace();} finally {// 关闭sqlSession
            sqlSession.close();}System.out.println("用户的id=" + user.getId());}}

转载于:https://www.cnblogs.com/yaowen/p/4869265.html

mybatis06 增删改差 源码相关推荐

  1. java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例

    Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...

  2. android 增删改查 源码_学生信息增删改查小程序案例(springboot服务端)

    项目描述: 该小程序实现了简单的管理员登录,学生信息添加,修改,删除,列表显示等功能,服务器端采用springboot框架提供接口,数据传输格式为json,适合新手学习小程序与服务端的交互,以及增删改 ...

  3. javaweb+servlet+mysql登录+注册+增删改查源码

    一.项目功能简介 功能流程图 源码: 百度网盘链接:https://pan.baidu.com/s/1QpbX1Sz0nZJwlvzEvx7zEw  提取码:ynzu 数据库: 链接:https:// ...

  4. java jdom进行xml的增删改差_java使用DOM对XML文档进行增删改查操作实例代码

    本文研究的主要是java使用DOM对XML文档进行增删改查操作的相关代码,具体实例如下所示. 源代码: package com.zc.homeWork18; import java.io.File; ...

  5. C++ 连接Mongo数据库实现增删改差

    没人教,没人带,没文档,自己找了资料找了一下午终于写好了,可以当个参考吧,注释不多,浅显易懂. #include<cstdlib> #include<iostream> #in ...

  6. Hbase新API以及Hbase增删改差

    2019独角兽企业重金招聘Python工程师标准>>> Hbase 1.0之后API改进与升级: 最近发觉网上教程略显陈旧,API还是使用老式的API,导致代码成片的deprecat ...

  7. java 对增删该查进行测试_java连接mysql增删改查测试通过

    把数据库连接作为一种方法调用实现增删改查 源码参考: import java.sql.*; public class JDBC_Test { // 创建静态全局变量 static Connection ...

  8. 2014年4月底至5月初51Aspx源码发布详情

    精灵豆会员管理系统源码  2014-4-21 [VS2010]功能介绍:精灵豆会员管理系统业务管理平台采用微软选进的C#语言开发,采用大型数据库,具有比较高的执行效率和高安全性.系统分为消费管理,会员 ...

  9. 分享136个ASP源码,总有一款适合您

    ASP源码 分享136个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 136个ASP源码下载链接:https://pan.baidu.com/s ...

最新文章

  1. java 线程池 初始大小,Java线程池ThreadPoolExecutor的实现和参数
  2. Python学习教程:Python爬虫抓取技术的门道
  3. mysql to double_MySQL令人咋舌的隐式转换 - 惊觉...
  4. Mybatis问题:There is no getter for property named 'unitId' in 'class java.lang.String'
  5. 39--打印从1到最大的n位数
  6. 你听过算法也是可以贪心的吗?
  7. CS 540: Introduction to Artificial Intelligence
  8. python面对对象的编程语言_python面对对象编程
  9. Android显示shp文件,Arcgis for Android移动平台能直接打开本地的shp文件吗
  10. vue实现分屏_VUE视频怎么分镜 VUE视频如何进行分镜编(图文步骤)
  11. linux修改IP地址的命令
  12. 笔记本键盘失灵的修复方法
  13. ASP.NET MVC入门视频教程
  14. 从计算机内部提取型号和mac,Mac计算机型号这么多 我该选哪一个?
  15. Gitea:从SVN迁移到Git
  16. 服务器没有立即响应请求,服务器没有及时响应或控制请求
  17. opencv:对`cv :: DescriptorMatcher‘的未定义引用
  18. 人生就是一场永不停歇的修行
  19. 献给我曾经的偶像—特雷西·麦克格雷迪
  20. 品酒论三国之一(创业时代的第二堂必修课:自助者天助)

热门文章

  1. jQuery选择器的效率问题
  2. Fragment 横竖屏切换问题
  3. java课堂作业(一)
  4. 转载:闲话权限设计三层境界
  5. html三元运算符 模板,AngularJS模板中的三元运算符
  6. java非阻塞锁_Java并发问题的非阻塞解决方案
  7. vector的初始化及常用操作
  8. mysql cluster 外键_Mysql外键约束
  9. Servlet拦截器
  10. c语言中有哪些函数关系,C语言中有哪些常用的函数