代码不能直接copy运行,有些内容是为了说明知识点

1,sqlMqpConfig.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> <!-- 引入外部属性文件 -->
<properties resource="jdbc.properties" /> <environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource> <!--
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</dataSource>
-->
</environment>
</environments> <!-- 指定映射文件或映射类 -->
<mappers>
<mapper resource="sqlMap/emp.xml"/>
</mappers> </configuration>

2,log4j.properties

#在开发环境下,日志级别要设置成DEBUG,生产环境设置成info或error
log4j.rootLogger=DEBUG, stdout #Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%c] - %m%n

3, jdbc.properties

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc.username=scott
jdbc.password=tiger

4, Emp.java

package com.mybatis.entity;

public class Emp {

    private String ename;

    private int empno;

    private String job;

    public String getEname() {
return ename;
} public void setEname(String ename) {
this.ename = ename;
} @Override
public String toString(){
return "Emp [ ename = " + ename + "; empno = " + empno + "]"; } public Emp(int empno, String ename, String job){ super();
this.empno = empno;
this.ename = ename;
this.job = job;
} public int getEmpno() {
return empno;
} public void setEmpno(int empno) {
this.empno = empno;
} public String getJob() {
return job;
} public void setJob(String job) {
this.job = job;
}
}

5, emp.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"> <mapper namespace="test"> <!-- #{id}如果传入参数是简单类型,名称任意 -->
<!-- ${}表示拼接字符串,将接收到的参数内容不加修饰拼接到sql中
会引起sql注入
${value}:接收输入参数内容,如果是简单类型,只能使用${value}
-->
<select id="findEmpByEmpNo" parameterType="int" resultType="com.mybatis.entity.Emp">
select * from emp where empno =#{empno}
</select> <select id="findEmpByJob" parameterType="java.lang.String" resultType="com.mybatis.entity.Emp">
select ename from emp where job =#{job}
</select> <!-- 模糊查询 -->
<select id="findByName" parameterType="java.lang.String", resultType="com.mybatis.entity.Emp">
select * from emp where empno like '%${value}%'
</select> <!-- 输入类型参数是pojo,mybatis通过OGNL获取对象属性值
//比如java中:System.out.println(emp.getID());
// 检索时提交事务
//sqlSession.commit();
-->
<insert id="save" parameterType="com.mybatis.entity.Emp">
<!-- 将插入数据的主键返回(比如自增主键时),返回到user对象中
SELECT LAST_INSERT_ID():得到insert进去记录的主键值,只适用于自增主键
注:单独使用时返回0
keyProperty:将查询到的主键值设置到parameterType指定的对象的那个属性中
order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey> <!-- 使用mysql的uuid()函数生成主键
执行过程:先使用uuid()获得主键,再将主键设置到user对象的id中
其次在insert执行时,从user对象中取得id属性
--> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT UUID()
</selectKey>
《此时需要传入id
insert into emp(id,empno,ename,job) values (#{id},#{empno},#{ename},#{job})
insert into emp(empno,ename,job) values (#{empno},#{ename},#{job})
</insert> <update id="update" parameterType="com.mybatis.entity.Emp">
update emp set ename=#{ename} where empno=#{empno}
</update> <delete id="delete" parameterType="int">
delete from emp where empno=#{empno}
</delete> </mapper>

6, MybatisService.java

public class MybatisService {

    @Test
public void findEmpByJobTest(){ //mybatis 配置文件
String resource = "SqlMapConfig.xml";
InputStream inputStream = null;
SqlSession sqlSession = null; try {
// 使用MyBatis提供的Resources类加载myBatis的配置文件(它也加载相关联的映射文件)
inputStream = Resources.getResourceAsStream(resource); //构建sqlSession工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建能执行映射文件中sql的sqlSession
sqlSession = sqlSessionFactory.openSession(); // Emp emp = sqlSession.selectOne("test.findEmpByEmpNo", 7369);
List<Emp> emp = sqlSession.selectList("test.findEmpByJob", "CLERK");
//System.out.println(emp.toString()); // 更新时时提交事务
//sqlSession.insert("test.save", emp);
//sqlSession.commit();
//System.out.println(emp.getID()); System.out.println(emp); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} }

7, 另外

非自增主键返回(使用uuid)
使用mysql的uuid()函数生成主键,需要修改表中id类型为String
执行思路:
先通过uuid查到主键,将主键输入到insert语句中
执行uuid语句顺序在insert前

mybatis小结-001的更多相关文章

  1. Spring整合MyBatis小结

    MyBatis在Spring中的配置 我们在Spring中写项目需要运用到数据库时,现在一般用的是MyBatis的框架来帮助我们书写代码,但是学习了SSM就要知道M指的就是MyBatis,在此,在Sp ...

  2. mybatis小结

    mybatis是Apache的一个开源项目ibatis,后由Google管理,目前在github上.MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架. 一.mybatis解决 ...

  3. Java Persistence with MyBatis 小结3

    1 映射器配置文件和映射器接口 在 com.mybatis3.mappers 包中的 StudentMapper.xml 配置文件内,是如何配置 id 为”findStudentById”的 SQL ...

  4. Java Persistence with MyBatis 小结2

    MyBatis 最关键的组成部分是 SqlSessionFactory,我们可以从中获取 SqlSession,并执行映射的 SQL 语句.SqlSessionFactory 对象可以通过基于 XML ...

  5. Java Persistence with MyBatis 小结1

    数据持久层做的工作是1)将从数据库中查询到的数据生成需要的java对象:2)将 Java 对象中的数据通过 SQL 持久化到数据库中. MyBatis 通过抽象底层的 JDBC 代码,自动化 SQL ...

  6. mybatis 小结

    1.  根据后台list 在SQL中使用到In的时候 <if test="sbidList != null and sbidList.size() > 0"> A ...

  7. rem自适应布局小结001

    在最近的移动端布局当中,最炙手可热的方式便是使用rem进行元素的布局.以下便是从最近的文章中所总结出来的一点东西. 首先,我们必须有以下的疑问: rem的本质是什么? rem如何实现自适应布局? 如何 ...

  8. 图解Mybatis框架原理及使用

    1.前言 努力学习完ssm框架之后,终于也成功的把三大框架的使用以及配置文件细节忘得一干二净.为了努力捡起来以及方便今后的复习,决定写一篇博客记录一下. 本博客的所有分析都是在持久层接口以及接口中的方 ...

  9. Dance In Heap(二):一些堆利用的方法(上)

    0×00 前面的话 在前面的文章里我们稍微有点啰嗦的讲解了堆中的一些细节,包括malloc.free的详细过程,以及一些检查保护机制,那在这篇文章里,我们就开始结合这些机制,以64位为例来看一看如何对 ...

随机推荐

  1. java语言描述 猴子吃桃问题(递归和循环写法)

    //题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个//第二天早上又将剩下的桃子吃掉一半,又多吃了一个//以后每天早上都吃了前一天剩下 的一半零一个.到第10天早上想再 ...

  2. microbiom github reference

    https://github.com/SchlossLab https://github.com/crazyhottommy

  3. Uber优步北京第四组奖励政策

    优步北京第四组: 定义为2015年7月20日至今激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最新最详细 ...

  4. 青岛Uber优步司机奖励政策(1月11日~1月17日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. python字符串格式化符号及转移字符含义

    博文出自鱼C论坛文章 http://bbs.fishc.com/thread-39140-1-1.html

  6. 机器学习实战:KNN代码报错“AttributeError: 'dict' object has no attribute 'iteritems'”

    报错代码: sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) 解决 ...

  7. EF SQLite的Like语句,生成为CHARINDEX的解决办法

    在使用EF SQLite的时候发现Like语句不能完全查询出来,看了下生成的SQL语句类似于这种 (CHARINDEX(@p__linq__2, [Extent1].[LeagueName])) &g ...

  8. json模块使用总结——Python

    # 原创文章,未经允许请勿转载 通过Python的json模块,可以将字符串形式的json数据转化为字典,也可以将Python中的字典数据转化为字符串形式的json数据. 之前使用这个模块时,都是随用 ...

  9. 汽车VIN码识别/汽车车架号OCR识别,移动端VIN码识别,OCR扫描工具

    本文推荐了一项汽车VIN码自动识别技术,用户通过手机“扫一扫”的简单操作,就可以快速识别VIN码,查询到车辆的详细信息,为汽修汽配.二手车交易.车辆监管.查勘理赔提高工作效率. VIN是英文Vehic ...

  10. Java+Selenium 3.x 实现Web自动化 - 1.自动化准备

    (一)自动化准备 说明:本文主要记录了基于公司现有项目(一个电子商务平台),从0开始实现UI自动化的历程.从准备阶段,部分内容直接省略了基础知识,一切以最终做成自动化项目为目标,难免会有晦涩之处.文章 ...