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 ...
随机推荐
- ArrayList和CopyOnWriteArrayList
这篇文章的目的如下: 了解一下ArrayList的增删改查实现原理 看看为什么说ArrayList查询快而增删慢? CopyOnWriteArrayList为什么并发安全且性能比Vector好 1. ...
- C/C++ 定义与声明详解(转)
转自:http://blog.csdn.net/xiaoyusmile/article/details/5420252 1. 变量的定义.声明 变量的声明有两种情况: 一种是需要建立存储空间的.例如: ...
- go web 第二天 学习笔记
package main import ( "crypto/md5" "fmt" "html/template" "io" ...
- expander graph&random walk的一个小应用
此文主要总结的是一种随机算法,旨在判断一个expander图上两点是否连通.复杂度O(logn).算法思路清奇. expander graph博大精深,如果对expander graph的生成,fam ...
- 知名渗透测试利器分享 - Appscan下载
安全测试应该是测试中非常重要的一部分,但他常常最容易被忽视掉. 尽管国内经常出现各种安全事件,但没有真正的引起人们的注意.不管是开发还是测试都不太关注产品的安全.当然,这也不能怪我们苦B的" ...
- 转每天一个linux命令(7):mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- oracle导库
cmd窗口直接输入导库命令即可,不需要进入sqlplus C:\Documents and Settings\Administrator> imp username/pass@orcl file ...
- ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) python代码报错
import sys reload(sys) sys.setdefaultencoding('utf-8')
- python爬虫之一---------豆瓣妹子图
#-*- coding:utf-8 -*- __author__ = "carry" import urllib import urllib2 from bs4 import Be ...
- Mysql中使用聚合函数对null值的处理
平时因为对于数据库研习的不深,所以在面试的时候问了一些平常遇到过的问题居然没法很肯定地回答出来,实在让自己很恼怒! 这次让我记忆深刻的一个问题是: 在mysql中使用聚合函数的时候比如avg(t),t ...