Mybatis

  好吧这是我第一次写这种文章~如果有不足和错误之处欢迎评论,指点。今天想谈谈关于mybatis的一些基础入门知识。

  进入正题~~:

  a.关于mybatis:

    我个人觉得mybatis深得中国中庸之道的精髓,虽然在执行速度上来说它没有直接使用jdbc那么效率,也不如Hibernate那么全自动(O/R mapping),只能算是个半自动的(O/R mapping)

  但是半自动的好处就在于它的各个方面的缺点也都不像jdbc或者Hibernate那么突出.兼顾了效率也预防了优化sql的问题。

  b.所需要使用到的jar

    1.mybatis  2.ojdbc  3.hamcrest(mybatis的依赖包,如果使用maven下载mybatis会自动下载此包)

  c.需要用到的2个xml(1.SqlMapConfig.xml  ,  2.EmpMapper.xml)1.(配置文件)  2.(映射文件)

    c.1:SqlMapConfig.xml  

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<environments default="environment">
<environment id="environment">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@172.17.6.250:1521:orcl" />
<property name="username" value="openlab" />
<property name="password" value="***" />
</dataSource>
</environment>
</environments>
<!-- 指定映射文件的位置: -->
<mappers>
<mapper resource="entity/EmpMapper.xml" />
</mappers>
</configuration>

    c.2:EmpMapper.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="test">
<!-- id:要求唯一,可以称之为sqlId
parameterType:参数类型,要写类的完整的名字 -->
<insert id="save" parameterType="entity.Employee">
insert into syq_emp values (syq_emp_seq.nextval,#{name},#{salary},#{age})
</insert>
<!-- 
resultType:返回类型
-->
<select id="findAll" resultType="entity.Employee">
select * from syq_emp order by id
</select>
<select id="findById" 
parameterType="int"
resultType="entity.Employee">
select * from syq_emp where id=#{id}
</select>
<update id="modify" parameterType="entity.Employee">
update syq_emp set name=#{name}, salary=#{salary},age=#{age} 
where id=#{id}
</update>
<delete id="delete" parameterType="int">
delete from syq_emp where id=#{id}
</delete>
<!-- map是Java.util.Map的简写形式 -->
<select id="findById2" parameterType="int" resultType="map">
select * from syq_emp where id=#{id}
</select>
<!-- 告诉mybatis,实体类的属性名与数据库的字段名的对应关系
注:只需要将不一致的列举出来 -->
<resultMap type="entity.Emp" id="empResultMap">
<result property="empId" column="id"/>
</resultMap>
<select id="findById3" parameterType="int"
resultMap="empResultMap">
select * from syq_emp where id=#{id}
</select>
</mapper>

  d.最后就是测试mybatis啦~~

            (我使用的是junit来测试:具体代码如下:)

public class TestCase {
private SqlSession ss;
@Before
public void test() {
String config="SqlMapConfig.xml";
SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
SqlSessionFactory ssf=
ssfb.build(TestCase.class.getClassLoader().getResourceAsStream(config));
ss=ssf.openSession();

}
@Test
public void test1() {
/*
* SqlSession提供了执行sql的个各种方法,一般第一个是参数要执行的sql的ID
* 如果是添加,删除及修改操作,要提交事务
* 方法执行完毕,要关闭SqlSession
*/
Employee e=new Employee();
e.setName("杨过");
e.setSalary(2000.0);
e.setAge(25);
ss.insert("test.save",e);
ss.commit();
ss.close();
}
//findAll
@Test
public void test2() {
List<Employee> list=ss.selectList("test.findAll");
System.out.println(list);
ss.close();
}
//findById
@Test
public void test3() {
Employee e=ss.selectOne("test.findById", 2);
System.out.println(e);
ss.close();
}
//测试修改
@Test
public void test4() {
Employee e=ss.selectOne("test.findById", 2);
System.out.println(e.getSalary());
e.setSalary(e.getSalary()+1000);
ss.update("modify", e);
ss.commit();
ss.close();
}
//测试删除
@Test
public void test5() {
ss.delete("test.delete", 2);
ss.commit();
Employee e=ss.selectOne("test.findById", 2);
System.out.println(e);
ss.close();
}
//测试返回map型
@Test
public void test6() {
Map map=ss.selectOne("findById2",4);
System.out.println(map);
ss.close();
}
//测试实体类属性与数据库不一样的解决方法
@Test
public void test7() {
Emp e=ss.selectOne("findById3", 4);
System.out.println(e);
}
}

   e.最后谈谈映射器吧:

1)mapper映射器是什么?

  符合映射文件要求的接口。

    要求如下:

       a.方法名要与sqlId一致。

       b.方法的返回类型要与resultType一致。

       c.方法的参数类型要与parameterType一致。

       d.映射文件的namespace必须等于接口的完整的名字。

注: mybatis会生成符合该接口(mapper映射器)要求的对象。

2)如何使用mapper映射器?

  step1.按照要求写好接口。

  step2.调用SqlSession提供的getMapper方法来获得接口实现

ps:

    如果今后发现有什么有趣的功能或者小技巧在补充吧,也欢迎大神补充~~

mybatis入门篇基——基本配置与参数说明的更多相关文章

  1. Mybatis入门篇之结果映射,你射准了吗?

    目录 前言 什么是结果映射? 如何映射? 别名映射 驼峰映射 配置文件开启驼峰映射 配置类中开启驼峰映射 resultMap映射 总结 高级结果映射 关联(association) 例子 关联的嵌套 ...

  2. Mybatis入门篇之基础CRUD

    前言 作为一个资深后端码农天天都要和数据库打交道,最早使用的是 Hiberate,一个封装性极强的持久性框架.自从接触到 Mybatis 就被它的灵活性所折服了,可以自己写 SQL,虽然轻量级,但是麻 ...

  3. mybatis入门篇:Mybatis高级查询

    1.ResultMap的association与collection association与collection功能类似,区别是一对一与一对多,这里以association为例. 首先说明一下需求: ...

  4. mybatis入门篇:代码生成器(MyBatis Generator)

    这篇文章只是按照自己的需要去配置代码生成器,未对所有配置进行讲解,需要了解具体详情的,请到官网查阅文档.传送门:http://www.mybatis.org/generator/ 1.首先引入相关的依 ...

  5. mybatis入门篇:通过SqlSession.selectList进行数据查询

    作为一个java菜鸟,早就从慕课网中学到一些基本的mybatis的用法,但是一直不成体系,懵懵懂懂,既然正式入了java这个坑,就打算好好学学,所以买了本<MyBatis从入门到精通>,在 ...

  6. MyBatis入门篇

    一.什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

  7. mybatis入门_配置文件的配置

    一.全局配置文件配置 1.1 properties标签 Properties标签可以用来加载配置文件.例如,我们可以将数据库的连接信息放入到一个配置文件(db.properties中..) 下为db. ...

  8. RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)

    一.消息队列使用场景或者其好处 消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 在项目启 ...

  9. mybatis入门篇:存储过程的操作

    1.无ResultType/ResultMap查询 先定义一个查询的存储过程: DELIMITER // CREATE PROCEDURE `select_user_by_id`( IN userId ...

随机推荐

  1. 【Centos7】安装mysql5.7.16.tar.gz

    操作系统 centos7.1 云主机 1.下载好了压缩包到windows电脑上 2.使用Smartty的SCP传输到云主机的/home/xxx/下 3.解压 tar xvf  mysql-5.7.16 ...

  2. Win10家庭版设置桌面右键更换桌面壁纸

    Win10家庭版设置桌面右键更换桌面壁纸.. ------------------------- 这是设置之前的右键快捷菜单.. ------------------------- 开始设置:右键桌面 ...

  3. 把elipse非maven的Struts2+Spring+Ibatis项目导入Idea中

    1.按图示操作 2.选中自己要得到的项目 3.之后设定得到的项目放在哪里 项目得到之后,对项目点击右键Open Module Settings,点击Project,设置生成的编译文件存储路径 4.单击 ...

  4. 手把手封装数据层之DButil数据库连接的封装

    最近这段时间一直在用SSM框架做增删改查,突然想把以前还不会用框架的时候,综合百度和各种资料结合API文档抄袭而来的数据层的封装分享给大家.这边先封装一个DButil. 我这个封装就是烂大街的那种,没 ...

  5. python 之 计数器(counter)

    Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 c = Counter('abcdeabcdabcaba') print c 输出:Counter( ...

  6. Git学习总结(一)

    .常用Git命令清单 一.新建代码库 #在当前目录创建一个Git代码库 $ git init #新建一个目录,将其初始化为Git代码库 $ git init [project name] #下载一个项 ...

  7. spring mvc:事务引起的try/catch失效

    在测试一个接口时,发现一个奇怪的现象:该接口使用@ResponseBody注解返回json格式数据,并且使用try/catch包括全部逻辑代码,debug后发现返回数据没有任何错误,只包含一段因产生异 ...

  8. 第1阶段——uboot分析之通过nand命令读内核(8)

    本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0" 怎么实现nand命令读 ...

  9. 转:【Java并发编程】之二:线程中断(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17091267 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应 ...

  10. [2017BUAA软工助教]第0次个人作业

    学习别人的经验和体会 零.前言 我认为人生就是一次次地从<存在>到<光明>. 一.软件工程师的成长 0.这是一个博客索引 同学们在上这门课的时候基本都是大三,觉得在大学里,到教 ...