mybatis 基本配置信息
<?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>
<!-- 定义数据库信息,默认使用development数据库构建数据库连接
environments: 配置数据源的连接集合,可以配置多个数据源(mysql, Oracle1,Oracle2)
default : 默认启用那个数据源
-->
<environments default="development">
<!-- 数据源配置
transactionManager: 事务管理
dataSource : 数据源配置
id : 数据源的标识
-->
<environment id="development">
<!-- 事务管理: JDBC事务管理
1. JDBC 默认采用JDBC的事务管理
2. MANAGED :采用容器的方式管理事务(JNDI数据源)由开发者提示事务
3. 自定义,使用者定义数据库事务的管理方式
-->
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息
type : 提供链接数据库的连接方式
1. UNPOOLED : 非连接池数据库
2. POOLED : 连接池数据库
3. JDNI: JDNI 数据库
4. 自定义
-->
<dataSource type="POOLED">
<!-- -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="rootroot"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/lq/mapper/DeptMapper.xml"/>
</mappers>
</configuration>
连接测试
public class test {
public static void main(String[] args) {
/**
* SqlSessionFactory : 工厂接口,依靠工厂来生成SqlSession(会话)
* SqlSessionFactoryBuilder() : 构造器,读取配置文件,根据配置文件或代码来生成SqlSessionFactory
* SqlSession : 可以发送SQL去执行并返回结果,也可以获取Mapper接口
* SQL Mapper: 它是MyBatis设置的组件,它是由一个接口和xml文件
(注解)组成的, 需要给对应的映射规则,它赋值发送SQL语句去执行,并返回结果
*
*/
InputStream is;
try {
is = Resources.getResourceAsStream("myBatis.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
/**
* 1. 获取映射器,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行并返回结构
* 2. 直接通过命名信息去执行SQL返回结果,这是iBatis版本留下来的方法
* 可以通过update,insert, select, delete。。。 ,带上SQL的id来操作XML文件
* 中配置好的SQL完成数据库操作
* commit rollback操作。。。
*
*/
SqlSession session = sessionFactory.openSession();
/**
* 映射文件
* 编写SQl语句并添加id
* 映射器是由java接口和xml文件(注解)共同组成
* 1. 定义参数类型
* 2.描述缓存
* 3. 描述SQl语句
* 4. 定义查询结果和POJO的映射关系
*/
} catch (IOException e) {
e.printStackTrace();
}
}
}
Mapper.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="org.lq.dao.DeptDao">
<!--
映射文件
自动绑定JavaBean,只要你的SQL语句返回的列(字段) 和JavaBean的属性名保持一致
select:
查询语句,最长用,最复杂,可以自定义参数hr自定义返回结果集
insert :
添加语句,执行后返回一个整数,代表插入
update:
修改语句, 执行后返回一个整数,代表修改的条数
delete :
删除语句, 执行后返回一个整数,代表删除的条数
parameterMap :
定义参数映射关系,已被删除,不建议使用
SQL:
定义一部分的SQL语句然后在各个标签中引用
resultMap
描述数据块结果集和对象属性的映射关系,构造配置,集合配置,对象配置(.*hbm.xml)
cache : 给命名空间的缓存配置
cache-ref : 使用其他命名空间下面的配置信息
-->
<!--
id : 它和mapper 的命名空间组合组合起来标识 唯一,提供给myBatis调用,如果不是唯一的启动抛出异常
parameterType : 可以填写类的权限定名称,也可以使用别名(需要在核心配置文件中配置),传递参数使用
parameterMap : 已废弃
resultType :定义类的权限定名称,默认自动配置, int, double, float 总条数就应该放回int类型
int,double,float ...都是mybatis提供的别名
int = java.long.Integer
resultMap : 设置返回映射集,将列和字段进行关联配置,一对多,多对一,一对一的配置也需要使用
flushCache : 在调用SQL后,是否要myBatis清空之前查询的本地缓存和二级缓存
useCache: 启动二级缓存的开关
timeout : 设置超时时间,如果超过指定的时间,抛出异常
fetchSize : 获取记录的总条数
statementType: 指定执行jdbc的对象
-STATEMENT :
-PREPARED:
-CALLABLE : 调用存储过程的
autoMappingBehavior : 自动映射规则
NONE : 取消自动映射
PARTIAL :只会自动映射,没有定义嵌套集的映射
FIULL : 会自动映射任何复杂的结果集,无论是否嵌套
-->
<insert id="save" parameterType="org.lq.entity.Dept">
insert into dept
(deptNo,dname, loc)
values (dept_seq.nextval,#{dname},#{location})
</insert>
<!--
keyProperty : 设定回填主键的列名
useGeneratedKeys: mysql/sql server 获取自动增长的值
selectKey : 自定义生成结果
keyProperty : 临时存储查询结果的变量名称
resultType : 查询返回的结果类型
order : 先插入后再给属性赋值还是先给属性赋值在插入
BEFORE : 先赋值 在插入,
AFTER : 先插入在赋值
-->
<insert id="save2" parameterType="org.lq.entity.Dept" >
<selectKey keyProperty="deptNo" resultType="int" order="AFTER">
select dept_seq.nextval from dual
</selectKey>
insert into dept
(deptNo,dname, loc)
values (#{deptNo},#{dname},#{location})
</insert>
<!--
设置实体类和字段的映射关系
id : 设置唯一标识
type : 指定映射的JavaBean
id: 配置主键
result : 配置属性和字段的关系
-->
<!--
resultMap
contructor 构造
id
result
association 一 对象
collection 多 集合
-->
<resultMap type="org.lq.entity.Dept" id="depResult">
<constructor>
<arg column="dname" javaType="string"/>
<arg column="loc" javaType="string"/>
</constructor>
</resultMap>
<select id="getstru" resultMap="depResult">
select * from dept
</select>
<resultMap type="org.lq.entity.Dept" id="deptResultMap">
<result property="location" column="loc"/>
</resultMap>
<select id="findAll" resultMap="deptResultMap">
select deptno, dname, loc location from dept
</select>
<select id="findDname" resultType="org.lq.entity.Dept">
select * from dept where dname like '%'||#{a}||'%'
</select>
<select id="findDname2" resultType="org.lq.entity.Dept">
select * from dept where dname like concat('%',concat(#{a},'%'))
</select>
<select id="findDname3" resultType="org.lq.entity.Dept">
select * from dept where dname like '%${a}%'
</select>
<select id="findDeptByName" resultType="org.lq.entity.Dept">
select * from dept where dname like '%${name}%' and deptNo > #{deptno}
</select>
<select id="findDeptByName1" resultType="org.lq.entity.Dept">
select * from dept where dname like '%${param1}%' and deptNo > #{param2}
</select>
<select id="findDeptByName2" resultType="org.lq.entity.Dept">
select * from dept where dname like '%${arg0}%' and deptNo > #{arg1}
</select>
</mapper>