mybatis06 增删改差 源码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

socket 编程 基于 select 实现的回射客户端/服务程序

github 代码 地址 unp.h #include <stdio.h> #include <unistd.h> #include <arpa/inet.h> #include <string.h> #include <sys/socket.h> #include <stdlib.h> #include <errno.h> #include <sys/wait.h> #include <sys…

MyEclipse的优化

出自&#xff1a;http://blog.csdn.net/u010124571/article/details/41316255?refmyread 第一步: 取消自动validation validation有一堆&#xff0c;什么xml、jsp、jsf、js等等&#xff0c;我们没有必要全部都去自动校验一下&#xff0c;只是需要的时候才会手工校验一下&…

NSlog输出

NSLog的定义 void NSLog(NSString *format, …); 基本上&#xff0c;NSLog很像printf&#xff0c;同样会在console中输出显示结果。不同的是&#xff0c;传递进去的格式化字符是NSString的对象&#xff0c;而不是char *这种字符串指针。 实例 NSLog可以如下面的方法使用&#x…

推理题,会则秒解

你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a;桌子上有一堆石头&#xff0c;每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人&#xff0c;每一步都是最优解。 编写一个函数&#xff0c;来判断你是否可以在给定石头…

【图论】割点、桥、双连通

连通分量 个数可以通过一次BFS或者DFS得到 割点和桥 可以枚举删除每一个点或者每一条边&#xff0c;判断连通分量个数是否增加 更好的方法 该算法是R.Tarjan发明的。对图深度优先搜索&#xff0c;定义DFS(u)为u在搜索树&#xff08;以下简称为树&#xff09;中被遍历到的次序号…

奇酷手机显示Log

1、在桌面点击拨号&#xff0c;在拨号盘输入“*20121220#”&#xff0c;进入工程模式;2、看到日志输出等级&#xff0c;点进去 Log print enable 选 enable Java log level 选 LOGV C and C log level 选 LOGV Kernel log level 选 KERN_DEBUG3、完毕 参考网址&#xff1a;http…

getCanonicalPath getAbsolutePath区别

1、在winows环境下它们的区别是 &#xfeff;&#xfeff;getCanonicalPath是标准路径&#xff0c;没有特殊字符&#xff0c;getAbsolutePath是有特殊字符的 2、在AIX系统中它们的区别&#xff1a; 首先编译&#xff1a;javac com/ai/test/BugTest.java 然后运行&#xff1a;ja…

Hbase与hive整合

//hive与hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by org.apache.hadoop.hive.hbase.HBaseStorageHandler whth serdeproperties("hbase.columns.mapping" :key,cf1:score)tblproperties("hbase.table.name" &q…

C++实现一个http服务器

一个简单的博客后端服务器 github地址&#xff0c;持续更新 设计参考 #define MYSQLPP_MYSQL_HEADERS_BURIED #include "httplib.h" #include "rapidjson/document.h" #include <mysql/mysql.h> #include <iostream> #include <string>…

KMP算法的java实现

package com.trs.utils;public class KMPStr {/** 在KMP算法中&#xff0c;最难求的就是next函数&#xff0c;如何理解next函数是一个难题&#xff0c;特别是knext[k]&#xff0c;这里* 需要指出的是当p[i]!p[j]时&#xff0c;我们只有通过回溯将k的值逐渐减小&#xff0c;貌似…

线段分割法实现微信抢红包

无意间看到的一种实现抢红包的方法&#xff0c;于是用C实现了一下。 将一个红包分成 n 份 具体的思路是&#xff0c;将一个红包看作是一个线段&#xff0c;线段的长就是红包总金额&#xff0c;然后在这个线段上随机切 n-1 刀&#xff0c;分成 n 份&#xff0c;然后抢红包的人依…

JAVA多线程和并发基础面试问答(转载)

JAVA多线程和并发基础面试问答 原文链接&#xff1a;http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/ 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里&#xff0c;从面试的角度列出了大部分重要的问题&#xff0c…

Linux的学习--crontab

之前了解过一点crontab&#xff0c;前段时间比较闲&#xff0c;就熟悉了一下&#xff0c;今天总结记录一下。 crontab命令常见于Unix和类Unix的操作系统之中&#xff0c;用于设置周期性被执行的指令。该命令从标准输入设备读取指令&#xff0c;并将其存放于"crontab"…

C++雪花算法实现

看来一下雪花算法的实现方法&#xff0c;用 c试着实现了一下&#xff0c;这里仅仅是实现了算法的流程&#xff0c;但是具体的细节&#xff0c;如并发、多线程访问等等没有具体考虑。 雪花算法的简单讲解参考 #include <sys/select.h> #include <iostream> #includ…

CAlayer层的属性

iOS开发UI篇—CAlayer层的属性 一、position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性&#xff1a;position和anchorPoint property CGPoint position; 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) property CGPoint anchorPoint; 称为“定位点”、…

Window Linux下实现指定目录内文件变更的监控方法

转自&#xff1a;http://qbaok.blog.163.com/blog/static/10129265201112302014782/ 对于监控指定目录内文件变更&#xff0c;window 系统提供了两个未公开API&#xff1a;SHChangeNotifyRegister SHChangeNotifyDeregister 分别用于注册Notify以及监视。 同时&#xff0c;还提…

Odoo9发行说明

2015年10月1日&#xff0c;期待已久的Odoo9正式发布。本文是Odoo9正式版发行说明&#xff0c;基于官网资料翻译。 译者: 苏州-微尘原文地址&#xff1a;https://www.odoo.com/page/odoo-9-release-notes译文地址&#xff1a;http://blog.csdn.net/wangnan537/article/details/4…

揭秘史上最完美一步到位的搭建Andoriod开发环境

Windows环境下Android开发环境搭建虽然不难而且网上资料众多&#xff0c;但是众多资料如出一折 忽略了很多细节&#xff0c;最终还是没能达到满意效果。 基本步骤如下&#xff1a;JDK安装、环境变量配置、Eclipse下载、AndoriodSDK下载安装、下载配置ADT但是到这里还不算完美搞…

基于OpenCv的人脸检测、识别系统学习制作笔记之二

在网上找到了一个博客&#xff0c;里面有大量内容适合初学者接触和了解人脸检测的博文&#xff0c;正好符合我目前的学习方面&#xff0c;故将链接放上来&#xff0c;后续将分类原博客的博文并加上学习笔记。 传送门&#xff1a; http://blog.sina.com.cn/s/articlelist_160256…

URL 化

URL化。编写一种方法&#xff0c;将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符&#xff0c;并且知道字符串的“真实”长度。&#xff08;注&#xff1a;用Java实现的话&#xff0c;请使用字符数组实现&#xff0c;以便直接在数组上操作。&#xf…