MyBatis学习_动态代理实现CRUD(mybatis接口开发)_优化conf_全局参数设置_别名_类型处理器
CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)
就是增删改查嘿嘿
我们现在用动态代理来实现之前的增删改查,实际就是简化之前的操作,具体简化的地方就是statement
简化statement
我们新建一个接口PersonMapper.java(用接口来当做桥梁,实现xml的标签和接口方法的映射),插入以下代码:
public interface PersonMapper { Person queryPersonById(int id); List<Person> queryAllPerson(); void addPerson(Person person); void deletePersonById(int id); void updatePersonById(Person person); }
需要注意的是:
映射关系建好了,可是怎么将接口和我们的personMapper.xm文件绑定起来,当我们调用接口的方法时自动找到我们这个personMapper里的标签呢?
将namespace改为我们接口的全路径即可
开始调用
将以上红框里的内容改为:
即可。
现在我们来优化conf.xml
优化conf.xml
之前我们将数据库连接信息都写在conf.xml中,看起来不够直接,现在我们将连接信息单独出来
在src文件夹下新建:db.properties文件,插入(这是我本机的,需要改成自己的):
driver=oracle.jdbc.OracleDriver url=jdbc:oracle:thin:@127.0.0.1:1521:orcl username=scott password=tiger
然后在conf.xml中引入db.properties文件
引入完成,使用方法如下(${}):
全局参数设置
全局参数在conf.xml中设置。
在settings中写需要设置的全局参数
全局参数有不少,一般情况下不要随意更改,默认即可
别名
有时候我们需要写很长的一串类路径,很麻烦,就需要用到别名来代替,别名不区分大小写
设置别名有两种方式1、单个设置 2、批量设置,都是在conf.xml中设置
类型处理器(就是类型转换器)
mybatis自带:int --> number…等等
自定义类型处理器:
1、现在我们设计一个转换器类:BooleanAndIntConverter.java,这个转换器需要实现的功能是将java里的:
boolean studentSex ;//true(男) false(女)
和数据库里的
number studentSex ;// 0(男) 1(女)
相互转化
2、让这个类实现TypeHandler接口或者继承TypeHandle的一个实现类BaseTypeHandler,后者比较简单一些。这里我们用继承。
继承之后需要实现这四个方法,get开头的是从数据库—>java,set开头的是从java—>数据库
3、插入以下代码:
public class BooleanAndIntConverter extends BaseTypeHandler<Boolean> { //java-->db @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException { if (aBoolean) { preparedStatement.setObject(i, 0); } else { preparedStatement.setObject(i, 1); } } //db->java 通过列名 @Override public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException { int sexNum = resultSet.getInt(s); return sexNum==0?true:false; } // 通过列 @Override public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException { int sexNum = resultSet.getInt(i); return sexNum==0?true:false; } //通过存储过程 @Override public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException { int sexNum = callableStatement.getInt(i); return sexNum==0?true:false; } }
转换器写好了,我们来配置转换器,同样在conf.xml里,注意INTEGER大写
<!--转换器配置--> <typeHandlers> <typeHandler handler="org.mybatis.cinverter.BooleanAndIntConverter" javaType="Boolean" jdbcType="INTEGER"></typeHandler> </typeHandlers>
接着在mapper里写,INTEGER大写
<!--1、如果类中属性类型和表中类型可以自动识别转换,就用resultType,否则resultMap 2、如果类中属性名和表中字段名一致,用resultType,否则resultMap--> <resultMap id="personResult" type="person"> <!--主键用id 非主键用result--> <id property="id" column="id"></id> <result property="name" column="name"></result> <result property="age" column="age"></result> <!--数据库转java--> <result property="sex" column="sex" javaType="Boolean" jdbcType="INTEGER"></result> </resultMap> <select id="queryAllPersonWithConverter" parameterType="int" resultMap="personResult"> select * from person where id = #{id} </select> <!--java->数据库--> <insert id="addPersonWithConverter" parameterType="person"> insert into person values(#{id},#{name},#{age},#{sex,javaType=Boolean,jdbcType=INTEGER}) </insert>
这样我们就可以使用转换器来转换
算了,该休息了,先到这,明天要更努力呀…
- MyBatis(一)入门使用步骤; 基础方式Statement的增删改查CRUD; mapper动态代理方式的crud (MyBatis接口开发)
- mybatis入门&三种接口代理开发&别名、返回值、类型转换&比较
- SSM框架系列学习总结5之Mybatis实现基本CRUD和代理开发模式
- mybatis CRUD之Mapper代理开发模式(接口实现 不需要实现类)
- 【MyBatis】03.接口开发 动态代理方式的CRUD
- Mapper动态代理方式的CRUD(增删改查)(MyBatis接口开发)
- Effective C# 学习笔记(四十一)使利用DynamicObject或IDynamicMetaObjectProvider接口实现数据驱动的动态类型
- JAVAWEB开发之mybatis详解(一)——mybatis的入门(实现增删改查操作)、自定义别名、抽取代码块以及动态SQL的使用
- MyBatis动态代理的方式DAO开发设置
- ## MyBatis持久层框架,实现数据访问,抽象方法多参数的处理,关于别名,MyBatis中的动态SQL,resultMap
- springMVC+Mybatis 学习笔记-【3】Mybatis【批量别名定义】和【类型处理器】
- Mybatis学习(2)原始dao开发和使用mapper接口代理开发
- MyBatis学习(四):MyBatis使用代理方法(接口)实现数据库的操作
- Java EE开发平台随手记5——Mybatis动态代理接口方式的原生用法
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- Mybatis 插件实现动态设置参数
- MyBatis学习总结(二):动态代理mapper和优化
- Mybatis学习总结(二).Mybatis普通方式实现CRUD及动态代理方式实现CRUD
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- Spring2.5学习4.2_Proxy实现动态代理(目标类实现随意接口)