导入jiar包
java工程BuildPath
Web工程导入lib(WebContent/WEB_INF)目录下
maven工程导入依赖(在pom.xml中写)
jar包记录
jar包名称 | 位置 | 导入方式 | 作用 |
---|---|---|---|
mybatis-x.x.x.jar(例如:mybatis-3.4.1.jar) | 一般在src下 | BuildPath | 框架 |
ojdbc.jar(例如:ojdbc6.jar) | 一般在src下 | BUildPath | 连接数据库 |
log4j.jar | 一般放在src下 | 需要配置文件 | 日志 |
jquery-1.8.3.min.js | webContent下 | js封装 | |
druid-1.1.23.jar(阿里的,可以用在mybatis中,2.数据源的配置里有用到) | 第三方连接池 | ||
JUnit4 | Packbage Explorer下右键工程名选择BuildPath选择Add Labraries | test包 | |
dom4j | xml文件解析 | ||
jstl(两个都要插入,还有一个是源码)标签库(可以el表达式) | 一般放在webContent下的lib中 | jsp文件中开头第二行(<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>) |
mybatis
1.导入依赖包
mybatis-x.x.x.jar(只导入zip中的jar包)
maven导入:pom.xml
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
2.数据源的配置(mybatis-config.xml)
一般写mybatis-config.xml(src下)
mybatis-config.xml文件补充:
-
1.environment default=“默认使用的环境ID”(一般默认development)
-
2.environment id=“给配置环境的唯一标识符”(一般为development,还有product和test)
-
3.transactionManager:type
两种类型 jdbc:手动编码,commit,rollback(所以要手动提交,如果不提交就会默认rollback回滚)
managered:交给容器去管理
-
4.dataSource:type
1).UNPOOLED
2).POOLED(池化,一次加载几个数据库内存)
3).JNDI:web服务器上配置数据源,然后通过JNDI查找的方式进行配置.
4).第三方数据源的实现:(一般导入druid-1.1.23.jar(阿里的))
实现mybatis提供的数据源工程接口
package com.briup.day02; import java.util.Properties; import javax.sql.DataSource; import org.apache.ibatis.datasource.DataSourceFactory; import com.alibaba.druid.pool.DruidDataSourceFactory; public class MyDataSourceFactory implements DataSourceFactory { private Properties props; @Override public void setProperties(Properties props) { this.props = props; } @Override public DataSource getDataSource() { try { return DruidDataSourceFactory.createDataSource(props); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } } }
-
5.properties
三个方式配置properties(一般写数据库四要素,所以一般不用),并且都可以通过${}获取属性值(见总代码)
1>.
<properties> <property name="username" vlaue="fr1"/> <property name="password" value="fr1"/> </properties>
2>.
<properties resource/url=""/> 例如:resource="db.properties" url="file:....properties"
3>.创建SQLSessionFactory对象是,传递Properties(见上方java代码(最近的)
优先级:3>2>1
-
6.typeAlias:给类型起别名
<typeAliases> <typeAlias type="com.briup.basic.Region" alias="Region"/> <package name="com.briup.basic"/> <!--两者只能写一个--> </typeAliases>
-
7.mappers:映射配置
<mappers> <!-- <mapper url="file:///D:\workspace-jd2013\mybatis_jd2007\src\com\briup\basic\IRegionDaoMapper.xml"/> --> <!-- <mapper resource="com/briup/basic/IRegionDao.xml"/> --> <!--class="com.briup.basic.IRegionDao",默认会从com包下找briup,找basic,找IRegiondao.xml文件。--> <!-- <mapper class="com.briup.basic.IRegionDao"/> --> <package name="com.briup.basic"/> </mappers>
-
8.方法参数的绑定
绑定方式:
1. #{paramName} :
代表使用PreparedStatement对象操作,所有的#{}的取值都会替换成? 绑定值(取值)
1. 单个参数。
1.1 简单类型(八种基本类型+包装类型+String)
#{paramName}: paramName可以随便写。一般名字表义性
${paramName}: paramName一定是 _parameter
1.2 自定义对象类型
#{paramName}: paramName是自定义对象属性的名字。
${paramName}: 同上,但是字符串/日期需要使用’'引起来
1.3 Map集合
#{paramName}:paramName是map集合中的key值。
${paramName}
2.多个参数
1. 默认情况下,可以使用:
1. #{0},#{1},…
2. #{param1},#{param2},…
2. @Param(“name”)---->#{name}
例如 updateSalaryById(@Param(“salary”)double salary)
#{salary}异常: 如果参数为null:(null会转成other类型) Exception: org.apache.ibatis.type.TypeException: Error setting null for parameter #2 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111 解决方案: 1. 局部:在参数取值时,同时设置jdbcType #{sex, jdbcType=VARCHAR} 2. 全部配置: mybatis-config.xml文件中 <settings> <setting name="jdbcTypeForNull" value="VARCHAR"/> </settings>
9.Select查询
<select id="">
1. 结果映射
1. 默认: 列名和对象的属性名保持一致。
2. 给列起别名:
3. resultMap定义:以统一的方式对列和对象属性的映射关系进行定义。
resultMap和resultType不同时存在
必须有id,ID一般为"baseMap"
2. 数据类型的处理(java ----- jdbc)
String sql = "insert into teach(id,name) values(?,?)";
pstmt.setInt(1,100);
pstmt.setString(2,"zhangsan");
String sql = "select id,name from teach";
Teacher t = new Teacher();
t.setId(rs.getInt("id"));
t.setName(rs.getString("name"));
mybatis内置了很多的类型转换器。TypeHandler
如果需要可以自定义属于自己的类型转换器:
interface TypeHandler
extends BaseTypeHandler
1.局部: mapper.xml
参数取值,将对象---》jdbc类型
#{adres,typeHandler=packageName.xxTypeHandler}
数据库结果==--->java对象。
<resultMap>
<result column="" property="" typeHandler="packageName.TypeHandlerName"/>
</resultMap>
2. 全局配置:
mybatis-config.xml
<typeHandlers>
<!-- <typeHandler handler="com.briup.day03.AdressTypeHandler"
javaType="com.briup.bean.Address"
jdbcType="VARCHAR"/> -->
<package name="com.briup.day03"/>
</typeHandlers>
3. 枚举类型的处理:
枚举类型默认使用的类型处理器:EnumTypeHandler ,默认将枚举类型的name,当作是要插入到数据库中的值。
如果想使用编号:EnumOrdinalTypeHandler
配置:
局部:
#{sex,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler,
javaType=com.briup.bean.Gender},
全局:mybatis-config.xml
<typehandlers>
<typeHandler handler="" javaType=""/>
</typeHandlers>
总代码
3.构建SqlSessionFactory对象
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
4.Mapper文件的配置
1.
<mapper namespace="要映射的接口的全限定名">
<select id resultType/resultMap="">
<insert id="方法名">
<selectKey keyColumn="列名" keyProperty="属性名" resultType="int" order="before" ><!--before:在insert之前-->
select sequence_name from dual
</selectyKey>
insert into
</insert>
<delete id="方法名">
<update id="方法名">
</mapper>
2.
<select id="" resultType/resultMap="">
id:方法名
resultType/resultMap: 代表结果类型(单行结果的返回类型)
3.
<insert id="" useGenerateKeys="true"(这个是mysql的)>
<selectKey keyColumn(主键列)="列名" keyProperty="属性名" resultType="int" order="BEFORE">
<!--使java内存和数据库中保持一样-->
select s_emp_id.nextval from dual
</selectKey>
insert into table name(column_name,..)
values(方法参数,数据库内置函数)
</insert>
Oracle:sequence_name.nextval
在IRegionDaoMapper.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="com.briup.basic.IRegionDao">
<select id="selectAll" resultType="com.briup.basic.Region">
select id,name from s_region
</select>
</mapper>
5.在mybaits-config.xml 中配置(第二步的文件)(在标签中补充)
将mapper文件配置在config文件中,让mybatis获取到这个映射信息
<mappers>
<mapper resource="com/briup/basic/IRegionDaoMapper.xml" />
</mappers>
6.创建SQLSession对象
SqlSession session = SqlSessionFactory.openSession();
7.通过SQLSession对象获取,mybatis自动生成的持久层实现对象(Mappper)
IRegionDao dao = session.getMapper(IRegionDao.class);
8.调用持久化方法执行
List list = dao.selectAll();
9.事务处理
sessioin.commit();
10.关闭资源
session.close();