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. iis6手工创建网站后无法运行php脚本

    给人搬了十几个网站,老站用西部数码建站助手创建的,现在过期了无法继续创建,只能在Internet 信息服务(IIS)管理器创建网站,创建下来都没问题,但是就是无法打开网站. 测试打开txt文档.静态页 ...

  2. 今天廷鹏师弟来的java建议

    如下一段获取数据代码的问题: public Serializable getById(Serializable id) throws BaseBusinessException {  if (id = ...

  3. es6 中的generator函数控制流程

    Generator函数跟普通函数的写法有非常大的区别: 一是,function关键字与函数名之间有一个星号: 二是,函数体内部使用yield语句,定义不同的内部状态(yield在英语里的意思就是“产出 ...

  4. Cobbler自动化安装部署系统

    自动化安装部署 https://www.cnblogs.com/nulige/p/6796593.html PXE+Kickstart工作原理 pxe+kickstart工作流程 网卡上的pxe芯片有 ...

  5. LambdaMART简介——基于Ranklib源码(一 lambda计算)

    学习Machine Learning,阅读文献,看各种数学公式的推导,其实是一件很枯燥的事情.有的时候即使理解了数学推导过程,也仍然会一知半解,离自己写程序实现,似乎还有一道鸿沟.所幸的是,现在很多主 ...

  6. Java中private、protected、public和default的区别 (转)

    本文内容转载自: https://www.cnblogs.com/jingmengxintang/p/5898900.html public: 具有最大的访问权限,可以访问任何一个在classpath ...

  7. Word操作(基于word2013)【非编程类】

    一.生成目录 1.word支持自动生成目录功能,生成地点为操作时光标的落点 2.生成方式:打开首选项,进入引用标签,如下图所示最左边即为目录选项. 一般有3个内置目录类型 a:手动目录,生成目录后只有 ...

  8. jenkins配置git

    # jenkins配置git # 检测当前git版本是否是2.7.4以上 git --version # 如果没有安装git直接源码安装即可,如果安装了先删除原来的git yum -y remove ...

  9. 转 GraphQL Schema Stitching explained: Schema Delegation

    转自官方文档 In the last article, we discussed the ins and outs of remote (executable) schemas. These remo ...

  10. 让APK 成功在 Windows 运行并可以设置本地文件

    让APK 成功在 Windows 运行并可以设置本地文件 安装 ARC Welder. 启动 ARC Welder 后选反apk 文件,下载 zip. 将 zip 解压修改 manifest.json ...