mybatis

导入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.jswebContent下标签下js封装
druid-1.1.23.jar(阿里的,可以用在mybatis中,2.数据源的配置里有用到)第三方连接池
JUnit4Packbage Explorer下右键工程名选择BuildPath选择Add Labrariestest包
dom4jxml文件解析
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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值