mybatis入门篇基——基本配置与参数说明
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入门篇基——基本配置与参数说明的更多相关文章
- Mybatis入门篇之结果映射,你射准了吗?
目录 前言 什么是结果映射? 如何映射? 别名映射 驼峰映射 配置文件开启驼峰映射 配置类中开启驼峰映射 resultMap映射 总结 高级结果映射 关联(association) 例子 关联的嵌套 ...
- Mybatis入门篇之基础CRUD
前言 作为一个资深后端码农天天都要和数据库打交道,最早使用的是 Hiberate,一个封装性极强的持久性框架.自从接触到 Mybatis 就被它的灵活性所折服了,可以自己写 SQL,虽然轻量级,但是麻 ...
- mybatis入门篇:Mybatis高级查询
1.ResultMap的association与collection association与collection功能类似,区别是一对一与一对多,这里以association为例. 首先说明一下需求: ...
- mybatis入门篇:代码生成器(MyBatis Generator)
这篇文章只是按照自己的需要去配置代码生成器,未对所有配置进行讲解,需要了解具体详情的,请到官网查阅文档.传送门:http://www.mybatis.org/generator/ 1.首先引入相关的依 ...
- mybatis入门篇:通过SqlSession.selectList进行数据查询
作为一个java菜鸟,早就从慕课网中学到一些基本的mybatis的用法,但是一直不成体系,懵懵懂懂,既然正式入了java这个坑,就打算好好学学,所以买了本<MyBatis从入门到精通>,在 ...
- MyBatis入门篇
一.什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...
- mybatis入门_配置文件的配置
一.全局配置文件配置 1.1 properties标签 Properties标签可以用来加载配置文件.例如,我们可以将数据库的连接信息放入到一个配置文件(db.properties中..) 下为db. ...
- RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)
一.消息队列使用场景或者其好处 消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 在项目启 ...
- mybatis入门篇:存储过程的操作
1.无ResultType/ResultMap查询 先定义一个查询的存储过程: DELIMITER // CREATE PROCEDURE `select_user_by_id`( IN userId ...
随机推荐
- Basic Skill
Get current script path script=$() Check for root user ] ; then echo "current user is not root ...
- 九天学会Java,第一天,变量和数据类型,赋值和输出
用9天入门三门编程语言,有可能嘛,尤其是对没有基础的同学来说?对于想学好的编程的人来说,无论从哪一门语言开始入手,语言的本身其实并不是我们最应该的关心的,至少不是作为一个初学者首先关心的. 网络上,网 ...
- 没有基础如何学习web渗透测试?
如果只是因为感兴趣玩玩的话,你可以不需要学习太多的脚本程序. 但是以下条件要具备 1.能看懂教程:能理解原理,例如解析漏洞,sql注入逻辑等 2.前端代码审计:html js css 3.主流工具的使 ...
- 说说我和QQ和她的故事
这篇文章纯属感慨而写, 没有教学性质,额我是Jyang 2780217151是我现在用的QQ,然而这并不是我要说的 大概在11年还是12年的时候,我玩这些所谓的黑客圈子,以前的网名我就不说了. 我记得 ...
- Jmeter录制脚本工具之chrome插件--BlazeMeter
前几天在我们的交流群,看到有童鞋问到BlazeMeter这个工具的用法,感觉还是一个比较不错的插件,比起我们大费周章的去安装badboy或者是使用Jmeter的代理服务器去录制脚本要容易多啦!大家有问 ...
- hdu3720 Arranging Your Team
Arranging Your Team Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- STL中set的用法
set,顾名思义,就是数学上的集合——每个元素最多只出现一次,并且set中的元素已经从小到大排好序. 头文件:#include<set> 常用的函数: begin() 返回set容 ...
- python pip升级失败
接上篇,使用命令:python -m pip install --upgrade pip 发现pip升级时报错,无法升级 解决方法: 1.使用如下命令,查看具体失败原因: pip install -- ...
- [2012-05-31]awk记录分割符RS
$awk -v RS= '{print $1}' test RS 默认值为\n 换行符. 此处设置RS= 等效于 RS="" 代表一个空行 (若理解有误请指正,在以下例子中符合) ...
- 浅谈JS的继承
JS继承 继承是OO语言中最为人津津乐道的概念,许多OO语言都支持两种方式的继承:接口继承:实现继承. 接口继承:只继承方法签名. 实现继承:继承实际的方法. 由于ES里函数没有签名,所以在ES里面无 ...