MyBatis初试
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
运用Mybatis框架修改项目,思路如下:
1、Oracle SQL Developer,表-》约束条件-》添加主键,实现主键自动增长。
(1)添加主键,
alter table "DYL"."COMPANY" add constraint pk_company primary key("COMPANYID") ;
(2)新建序列,
CREATE SEQUENCE "DYL"."COMPANY_SEQUENCE" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER NOCYCLE ;
(3)触发器-》创建序列中的主键,
begin
execute immediate 'create or replace trigger company_increase '||chr(10)||
' before insert on "DYL"."COMPANY" '||chr(10)||
' for each row '||chr(10)||
'begin '||chr(10)||
' if inserting then '||chr(10)||
' if :NEW."COMPANYID" is null then '||chr(10)||
' select COMPANY_SEQUENCE.nextval into :NEW."COMPANYID" from dual; '||chr(10)||
' end if; '||chr(10)||
' end if; '||chr(10)||
'end;'||chr(10);
end;
2、导入mybatis的jar包。
3、sqlMap-config.xml配置文件,在src目录下。每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 3 <configuration> 4 5 <typeAliases> 6 <typeAlias alias="Company" type="com.dyl.entity.Company"/> 7 <typeAlias alias="Dep" type="com.dyl.entity.Dep"/> 8 <typeAlias alias="Duty" type="com.dyl.entity.Duty"/> 9 <typeAlias alias="Staff" type="com.dyl.entity.Staff"/> 10 </typeAliases> 11 12 <environments default="development"> 13 <environment id="development"> 14 <transactionManager type="JDBC" /> 15 <dataSource type="POOLED"> 16 <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> 17 <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:PKMS" /> 18 <property name="username" value="DYL" /> 19 <property name="password" value="DYL" /> 20 </dataSource> 21 </environment> 22 </environments> 23 24 <mappers> 25 <mapper resource="com/dyl/entity/xml/Company.xml" /> 26 27 </mappers> 28 29 </configuration>
4、POJOs映射,Company.xml,实现数据的增删改查。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 5 <mapper namespace="com.dyl.dao.ICompanyDao"> 6 7 <select id="selectCompanyById" parameterType="BigDecimal" resultType="Company"> 8 select * from company where companyid = #{id} 9 </select> 10 11 <!-- 为了返回list 类型而定义的returnMap --> 12 <resultMap type="Company" id="resultListCompany"> 13 <id column="companyId" property="companyId" /> 14 <result column="companyName" property="companyName" /> 15 <result column="address" property="address" /> 16 <result column="telephone" property="telephone" /> 17 <result column="leader" property="leader" /> 18 <result column="mobilePhone" property="mobilePhone" /> 19 <result column="remark" property="remark" /> 20 </resultMap> 21 22 <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 --> 23 <select id="selectCompanys" parameterType="string" resultMap="resultListCompany"> 24 select * from company where companyName like #{companyName} order by companyid 25 </select> 26 27 <!--执行增加操作的SQL语句。id和parameterType分别与ICompanyDao接口中的addCompany方法的名字和参数类型一致。以#{name}的形式引用Company参数 28 的name属性,MyBatis将使用反射读取Company参数的此属性。#{name}中name大小写敏感。引用其他的gender等属性与此一致。useGeneratedKeys设置 29 为"true",表明要MyBatis获取由数据库自动生成的主键;keyProperty="companyid"指定把获取到的主键值注入到Company的companyid属性 --> 30 <insert id="addCompany" parameterType="Company" useGeneratedKeys="true" keyProperty="companyid"> 31 insert into company(companyName,address,telephone,leader,mobilePhone,remark) values 32 (#{companyName},#{address},#{telephone},#{leader},#{mobilePhone},#{remark}) 33 </insert> 34 35 <update id="updateCompany" parameterType="Company"> 36 update company set companyName=#{companyName},address=#{address},telephone=#{telephone}, 37 leader=#{leader},mobilePhone=#{mobilePhone},remark=#{remark} where companyId=#{companyId} 38 </update> 39 40 <delete id="deleteCompany" parameterType="BigDecimal"> 41 delete from company where companyid=#{id} 42 </delete> 43 44 </mapper>