1、写入数据并获取自增ID

XML配置:

  <!-- 写入数据获取自增ID -->
<insert id="insertLog" parameterType="com.mamaguwen.entity.sys_loginlog" useGeneratedKeys="true" keyProperty="logid">
insert into sys_loginlog (UserName) values (#{username})
</insert>

测试代码:

@Test
public void insertLog() {
sys_loginlog model = new sys_loginlog();
model.setIslogin(true);
model.setLoginip("127.0.0.1");
model.setLogintime(new Date());
model.setUsername("rhythmk"); int total = loginlog.insertLog(model);
System.out.println("影响数据条:" + total);
System.out.println("ID:" + model.getLogid());
/*
* 影响数据条:1 ID:4
*/ }

2、更新数据

  <!-- 更新数据 -->
<update id="updateLog" parameterType="com.mamaguwen.entity.sys_loginlog">
update sys_loginlog set username=#{username}
where LogId=#{logid}
</update>
    /*
* 更新数据
*/
@Test
public void updateLog() {
sys_loginlog record = new sys_loginlog();
record.setLogid(4L);
record.setUsername("wangkun");
int total = loginlog.updateLog(record);
System.out.println("影响数据条:" + total);
}

3、返回单个字符串对象:

    <!-- -返回单字段内容 -->
<select id="selectStringByKey" resultType="String" >
select UserName from sys_loginlog
where LogId = #{logid}
</select>
    /*
* 返回当个简单对象
*/
@Test
public void selectStringByKey() {
String record = loginlog.selectStringByKey(4);
System.out.println("返回的字符串:" + record);
}

4、返回List对象

<select id="selectLogList"    resultType="com.mamaguwen.entity.sys_loginlog">
select * from sys_loginlog
</select>
    /*
* 获取所有用户日志
*/
@Test
public void selectLogList() {
List<sys_loginlog> list = loginlog.selectLogList();
for (sys_loginlog log : list) {
System.out.println(log.getUsername());
}
}

5、返回List<String> 对象

     <select id="selectUserNameList"    resultType="String">
select UserName from sys_loginlog
</select>
    /*
* 获取所有用户名
*/
@Test
public void selectUserNameList() {
List<String> list = loginlog.selectUserNameList();
for (String str : list) {
System.out.println(str);
}
}

6、传入单个参数

     <select id="selectLogByKey"   resultType="com.mamaguwen.entity.sys_loginlog">
select * from sys_loginlog Where LogId=#{logid}
</select>
    /*
* 根据主键获取日志
*/
@Test
public void selectLogByKey() {
sys_loginlog model = loginlog.selectLogByKey(5); String str = String.format("id:%d,username:%s", model.getLogid(),
model.getUsername());
System.out.println(str);
}

7、执行存储过程:

    <!-- 执行存储过程 -->
<select id="callProc" resultType="String" >
<!--
drop procedure if exists ShowString;
CREATE PROCEDURE ShowString(
Str VARCHAR(30)
)
BEGIN
select Str as Item;
END;
CALL ShowString('rhythmk')
-->
call ShowString (#{str})
</select>
/*
* 执行存储过程
*/
@Test
public void callProc() {
String str = loginlog.callProc("rhytmk");
System.out.println(str);
}

8、批量写入数据

  <!-- 批量执行SQL -->
<!-- 生成SQL:
insert into sys_loginlog (username) values ('a'),('b')
-->
<insert id="insertBatch">
insert into sys_loginlog (username) values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.username})
</foreach>
</insert>
    /*
* 批量写入
*/
@Test
public void insertBatch() {
List<sys_loginlog> list = new ArrayList<sys_loginlog>();
for (int i = 0, j = 10; i < j; i++) {
sys_loginlog log = new sys_loginlog();
log.setUsername(String.format("wangkun%s", i));
list.add(log);
}
int total = loginlog.insertBatch(list);
System.out.println("生成数据条:" + total);
}

9、将字符串当参数出入进去

     <select id="selectLogByMap"     parameterType="Map"  resultType="com.mamaguwen.entity.sys_loginlog">
select * from sys_loginlog
where (username=#{username1} or username=#{username2} )
</select>
    /*
* 通过Map传入参数
*/
@Test
public void selectLogByMap()
{
Map<String, String> map=new HashMap<String,String>();
map.put("username1", "rhythmk");
map.put("username2", "wangkun");
List<sys_loginlog> list= loginlog.selectLogByMap(map);
for(sys_loginlog model:list)
{
String info= String.format("id%d,username%s", model.getLogid(),
model.getUsername());
System.out.println(info);
}
}

10、#{}与${}的区别

假如数据库 sys_loginlog表中有username=a,b两条数据。此时按下面配置文件,我传入'a','b'  则无法获取数据。

     <select id="selectLogByUserName"     parameterType="Map"  resultType="com.mamaguwen.entity.sys_loginlog">
select * from sys_loginlog
where username in ( #{username} )
</select>

现修改where条件,换成${},那么传入的参数讲直接体会SQL中对应的文本 :

     select * from sys_loginlog
where username in ( ${username} )
通过执行上面语句 生成的SQL为 : select * from sys_loginlog where username in ('a','b')

备注:

表结构:

CREATE TABLE `sys_loginlog` (
`LogId` bigint(20) NOT NULL AUTO_INCREMENT,
`UserName` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Pwd` varchar(32) COLLATE utf8_bin DEFAULT NULL,
`IsLogin` bit(1) DEFAULT NULL,
`LoginIp` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`LoginTime` datetime DEFAULT NULL,
PRIMARY KEY (`LogId`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Mapp数据操作接口:

public interface sys_loginlogMapper {

    /*
* 写入日志并返回自增的ID
* */
int insertLog (sys_loginlog record); /* 更新数据
* */
int updateLog(sys_loginlog record); /*
* 返回当个简单对象
* */
String selectStringByKey(@Param("logid") int logId ); /*
* 获取所有用户日志
* */
List<sys_loginlog> selectLogList(); /*
* 获取所有用户名
* */
List<String> selectUserNameList(); /*
* 根据主键获取日志
* */
sys_loginlog selectLogByKey(@Param("logid") int logid); /*
* 执行存储过程
* */
String callProc(@Param("str") String str); /*
* 批量写入
* */
int insertBatch(List<sys_loginlog> list); /*
* 通过Map传入参数
* */
List<sys_loginlog> selectLogByMap(Map<String, String> map); }

测试用例代码:

package com.mamaguwen.dao.test;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.management.loading.PrivateMLet; import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.mamaguwen.dao.sys_loginlogMapper;
import com.mamaguwen.entity.sys_loginlog; @RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring.xml",
"classpath:spring-mybatis.xml" })
public class TestSysloginlogMapper { private static final Logger logger = Logger.getLogger(Test_SysUser.class); private sys_loginlogMapper loginlog; public sys_loginlogMapper getLoginlog() {
return loginlog;
} @Autowired
public void setLoginlog(sys_loginlogMapper loginlog) {
this.loginlog = loginlog;
} /*
* 写入日志并返回自增的ID
*/
@Test
public void insertLog() {
sys_loginlog model = new sys_loginlog();
model.setIslogin(true);
model.setLoginip("127.0.0.1");
model.setLogintime(new Date());
model.setUsername("rhythmk"); int total = loginlog.insertLog(model);
System.out.println("影响数据条:" + total);
System.out.println("ID:" + model.getLogid());
/*
* 影响数据条:1 ID:4
*/ } /*
* 更新数据
*/
@Test
public void updateLog() {
sys_loginlog record = new sys_loginlog();
record.setLogid(4L);
record.setUsername("wangkun");
int total = loginlog.updateLog(record);
System.out.println("影响数据条:" + total);
} /*
* 返回当个简单对象
*/
@Test
public void selectStringByKey() {
String record = loginlog.selectStringByKey(4);
System.out.println("返回的字符串:" + record);
} /*
* 获取所有用户日志
*/
@Test
public void selectLogList() {
List<sys_loginlog> list = loginlog.selectLogList();
for (sys_loginlog log : list) {
System.out.println(log.getUsername());
}
} /*
* 获取所有用户名
*/
@Test
public void selectUserNameList() {
List<String> list = loginlog.selectUserNameList();
for (String str : list) {
System.out.println(str);
}
} /*
* 根据主键获取日志
*/
@Test
public void selectLogByKey() {
sys_loginlog model = loginlog.selectLogByKey(5); String str = String.format("id:%d,username:%s", model.getLogid(),
model.getUsername());
System.out.println(str);
} /*
* 执行存储过程
*/
@Test
public void callProc() {
String str = loginlog.callProc("rhytmk");
System.out.println(str);
} /*
* 批量写入
*/
@Test
public void insertBatch() {
List<sys_loginlog> list = new ArrayList<sys_loginlog>();
for (int i = 0, j = 10; i < j; i++) {
sys_loginlog log = new sys_loginlog();
log.setUsername(String.format("wangkun%s", i));
list.add(log);
}
int total = loginlog.insertBatch(list);
System.out.println("生成数据条:" + total);
} /*
* 通过Map传入参数
*/
@Test
public void selectLogByMap()
{
Map<String, String> map=new HashMap<String,String>();
map.put("username1", "rhythmk");
map.put("username2", "wangkun");
List<sys_loginlog> list= loginlog.selectLogByMap(map);
for(sys_loginlog model:list)
{
String info= String.format("id%d,username%s", model.getLogid(),
model.getUsername());
System.out.println(info);
}
}
}

mybatis 2 -常用数据操作的更多相关文章

  1. SNMP常用数据操作

    SNMP常用数据操作 snmp编程中常见的数据类型基本上就是integer32/oct_str(字节数组)/counter64/timeticks/dateAndTime这些.很多其它的比如Truth ...

  2. SpringCloud或SpringBoot+Mybatis-Plus利用mybatis插件实现数据操作记录及更新对比

    引文 本文主要介绍如何使用mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:mybatis插件(拦截器). ...

  3. SpringCloud或SpringBoot+Mybatis-Plus利用AOP+mybatis插件实现数据操作记录及更新对比

    引文 本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:AO ...

  4. Android 常用数据操作封装类案例

    1.DbHelper类 继承自SQLiteOpenHelper类,实现对数据库的基本操作 package com.example.utils; import android.content.Conte ...

  5. MySql常用数据操作

    1.数据库操作: MySQL服务管理命令: 1.启动服务:sudo service mysql start 2.停止服务:sudo service mysql stop 3.重新启动服务:sudo s ...

  6. Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作

    详细的Spring MVC框架搭配在这个连接中: Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 这篇主 ...

  7. Mybatis数据操作

    Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作   详细的Spring MVC框架搭配在这个连接中: Maven 工程下 Spring MVC 站点配置 (一) M ...

  8. 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案

    1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...

  9. 大数据(5) - HDFS中的常用API操作

    一.安装java 二.IntelliJ IDEA(2018)安装和破解与初期配置 参考链接 1.进入官网下载IntelliJ IDEA https://www.jetbrains.com/idea/d ...

随机推荐

  1. Gitlab项目用ssh克隆

    Gitlab项目用ssh克隆 1.  新建一个文件夹并用git bash here 打开 2.  在git bash here 输入命令行 ssh-keygen –t rsa –C“邮箱名” 3.  ...

  2. wikioi 1035 火车停留 裸费用流

    链接:http://wikioi.com/problem/1035/ 怎么说呢,只能说这个建图很有意思.因为只有m条道,然后能互相接在一起的连通,对每个点进行拆点,很有意思的一道裸费用留题. 代码: ...

  3. WEB标准以及W3C的理解和认识

    web标准简单来说可以分为结构.表现和行为.其中结构主要是有HTML标签组成.表现即指css样式表,通过css可以是页面的结构标签更具美感.行为是指页面和用户具有一定的交互,同时页面结构或者表现发生变 ...

  4. 彻底明白IP地址——计算相关地址

    知道ip地址和子网掩码后可以算出: 1. 网络地址 2. 广播地址 3. 地址范围 4. 本网有几台主机 例1:下面例子IP地址为192·168·100·5 子网掩码是255·255·255·0.算出 ...

  5. 006——php字符串中的处理函数(五)

    <?php /** * 一.addslashes() 在预定义字符串前添加反斜杠 * * stripslashes() 把转义字符串前的反斜杠删除 * get_magic_quotes_gpc( ...

  6. node 使用范围 和 node的优势 (为什么 创业公司 选择的不是 java php ruby 等)

    链接 一些国外大公司 范围: 第一: 希望合并后台多个接口 成为一个接口,  或者频繁改动接口 相关, 比如数据 和数据格式之类,  后台难以配合, 这里可以使用node作为后台的应用层调用其他接口 ...

  7. chrome 49 版本bug: flex父元素设置flex:1 , 子元素用height:100%无法充满父元素

    1 <div class="container"> <div class="item"> <div class="ite ...

  8. 图论期末大作业编程题(如何判断一个4连通4正则图为无爪、无K4图)

    博士期间估计这可能是唯一一个要编程的作业,搞了半天弄出这个东西,放这里为以后用到的时候查找方便. 说来也是可笑,读博士期间发现大家对上课也都没什么兴趣,老师也是那么回事,都说博士期间学的课程是要有助于 ...

  9. test20181029 数列

    题意 分析 考场做法 打表发现,最后的循环节一定是\(\gcd(a_1,a_2),\gcd(a_1,a_2),0\)这种形式,而稍微思考一下便知道这显然是一般情况. 然后都有gcd了,发现操作的实质都 ...

  10. StreamSets 部署 Pipelines 到 SDC Edge

    可以使用如下方法: 下载edge 运行包并包含pipeline定义文件. 直接发布到edge 设备. 在data colelctor 机器配置并配置了edge server 地址(主要需要网络可访问) ...