MyBatis初试
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;
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>
5、namespace="com.dyl.dao.ICompanyDao",修改dao接口,描述参数和SQL语句的返回值。ICompanyDao里面的方法名,对应,Company.xml里面的id。
1 package com.dyl.dao; 2 3 import java.math.BigDecimal; 4 import java.util.List; 5 6 import com.dyl.entity.Company; 7 /** 8 * Title: 知识管理系统 9 * Description: 知识管理系统1.0 10 * Copyright: Copyright (c) 2010-2020 11 * Company:妖灵科技 12 * Created on 2014-7-7 13 * @author dyl 14 * @version 1.0 15 */ 16 public interface ICompanyDao { 17 /** 18 * 根据分公司id查找分公司 19 * @param id 20 * @return 21 */ 22 public Company selectCompanyById(BigDecimal id); 23 /** 24 * 查找分公司 25 * @param companyName 26 * @return 27 */ 28 public List<Company> selectCompanys(String companyName); 29 /** 30 * 增加分公司 31 * @param company 32 */ 33 public void addCompany(Company company); 34 /** 35 * 修改分公司 36 * @param company 37 */ 38 public void updateCompany(Company company); 39 /** 40 * 删除分公司 41 * @param id 42 */ 43 public void deleteCompany(BigDecimal id); 44 45 }
6、测试dao接口。
1 package com.dyl.test; 2 3 import java.io.Reader; 4 import java.math.BigDecimal; 5 import java.util.List; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 12 import com.dyl.dao.ICompanyDao; 13 import com.dyl.entity.Company; 14 /** 15 * 测试类 16 * Title: 知识管理系统 17 * Description: 知识管理系统1.0 18 * Copyright: Copyright (c) 2010-2020 19 * Company:妖灵科技 20 * Created on 2014-7-7 21 * @author dyl 22 * @version 1.0 23 */ 24 public class CompanyXmlTest { 25 private static SqlSessionFactory sqlSessionFactory; 26 private static Reader reader; 27 28 static { 29 try { 30 reader = Resources.getResourceAsReader("sqlMap-config.xml"); 31 sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 32 } catch (Exception e) { 33 e.printStackTrace(); 34 } 35 } 36 37 public static SqlSessionFactory getSession() { 38 return sqlSessionFactory; 39 } 40 41 /** 42 * 查找分公司 43 * @param companyName 44 */ 45 public void getCompanyList(String companyName){ 46 SqlSession session = sqlSessionFactory.openSession(); 47 try { 48 ICompanyDao companyDao=session.getMapper(ICompanyDao.class); 49 List<Company> companys = companyDao.selectCompanys(companyName); 50 for(Company company:companys){ 51 System.out.println(company.getCompanyId().toString()+","+company.getCompanyName()+","+company.getAddress()); 52 } 53 } finally { 54 session.close(); 55 } 56 } 57 58 /** 59 * 测试增加,增加后,必须提交事务,否则不会写入到数据库。 60 */ 61 public void addCompany(){ 62 Company company=new Company(); 63 company.setCompanyName("妖灵科技"); 64 company.setAddress("四川成都"); 65 company.setTelephone("028-88888888"); 66 company.setLeader("妖灵"); 67 company.setMobilePhone("18888888888"); 68 company.setRemark("HO"); 69 SqlSession session = sqlSessionFactory.openSession(); 70 try { 71 ICompanyDao companyDao=session.getMapper(ICompanyDao.class); 72 companyDao.addCompany(company); 73 session.commit(); 74 } finally { 75 session.close(); 76 } 77 } 78 /** 79 * 先得到公司,然后修改,提交。 80 */ 81 public void updateCompany(){ 82 SqlSession session = sqlSessionFactory.openSession(); 83 try { 84 ICompanyDao companyDao=session.getMapper(ICompanyDao.class); 85 Company company=companyDao.selectCompanyById(new BigDecimal(2)); 86 company.setAddress("北京"); 87 companyDao.updateCompany(company); 88 session.commit(); 89 } finally { 90 session.close(); 91 } 92 } 93 94 /** 95 * 删除数据,删除一定要commit。 96 * @param id 97 */ 98 public void deleteCompany(BigDecimal id){ 99 SqlSession session = sqlSessionFactory.openSession(); 100 try { 101 ICompanyDao companyDao=session.getMapper(ICompanyDao.class); 102 companyDao.deleteCompany(id); 103 session.commit(); 104 } finally { 105 session.close(); 106 } 107 } 108 109 public static void main(String[] args) { 110 SqlSession session = sqlSessionFactory.openSession(); 111 try { 112 ICompanyDao companyDao=session.getMapper(ICompanyDao.class); 113 114 // // 根据分公司id查找分公司 115 // Company company=companyDao.selectCompanyById(new BigDecimal(5)); 116 // System.out.println(company.getCompanyName()); 117 // System.out.println(company.getAddress()); 118 // System.out.println(); 119 120 // // 查找分公司 121 // CompanyTest companyTest=new CompanyTest(); 122 // companyTest.getCompanyList("%"); 123 // System.out.println(); 124 125 // 增加分公司 126 Company company=new Company(); 127 company.setCompanyName("海口分公司"); 128 company.setAddress("海南海口"); 129 company.setTelephone("0898-88888888"); 130 company.setLeader("碧波"); 131 company.setMobilePhone("18888888888"); 132 company.setRemark("东方夏威夷"); 133 companyDao.addCompany(company); 134 session.commit(); 135 System.out.println("当前增加的公司名称为:"+company.getCompanyName()); 136 137 // // 修改分公司 138 // Company company=companyDao.selectCompanyById(new BigDecimal(4)); 139 // company.setAddress("天津"); 140 // company.setCompanyName("天津分公司"); 141 // company.setLeader("闻其"); 142 // company.setMobilePhone("18888888888"); 143 // company.setRemark("首都门户"); 144 // company.setTelephone("022-88888888"); 145 // companyDao.updateCompany(company); 146 // session.commit(); 147 // System.out.println("修改成功"); 148 149 // // 删除分公司 150 // companyDao.deleteCompany(new BigDecimal(5)); 151 // session.commit(); 152 // System.out.println("删除成功"); 153 154 } finally { 155 session.close(); 156 } 157 } 158 }
7、修改dao实现类。
1 package com.dyl.dao.impl; 2 3 import java.io.Reader; 4 import java.math.BigDecimal; 5 import java.util.List; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 12 import com.dyl.dao.ICompanyDao; 13 import com.dyl.entity.Company; 14 /** 15 * 数据持久层实现类 16 * Title: 知识管理系统 17 * Description: 知识管理系统1.0 18 * Copyright: Copyright (c) 2010-2020 19 * Company:妖灵科技 20 * Created on 2014-7-7 21 * @author dyl 22 * @version 1.0 23 */ 24 public class CompanyDaoImpl implements ICompanyDao{ 25 26 private static SqlSessionFactory sqlSessionFactory; 27 private static Reader reader; 28 29 static { 30 try { 31 reader = Resources.getResourceAsReader("sqlMap-config.xml"); 32 sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 } 37 38 public static SqlSessionFactory getSession() { 39 return sqlSessionFactory; 40 } 41 42 SqlSession session = sqlSessionFactory.openSession(); 43 ICompanyDao companyDao=session.getMapper(ICompanyDao.class); 44 45 public Company selectCompanyById(BigDecimal id) { 46 return companyDao.selectCompanyById(id); 47 } 48 49 public List<Company> selectCompanys(String companyName) { 50 return companyDao.selectCompanys(companyName); 51 } 52 53 public void addCompany(Company company) { 54 companyDao.addCompany(company); 55 session.commit(); 56 session.close(); 57 } 58 59 public void updateCompany(Company company) { 60 companyDao.updateCompany(company); 61 session.commit(); 62 session.close(); 63 } 64 65 public void deleteCompany(BigDecimal id) { 66 companyDao.deleteCompany(id); 67 session.commit(); 68 session.close(); 69 } 70 }
8、修改工厂。
1 package com.dyl.util; 2 3 import com.dyl.dao.impl.CompanyDaoImpl; 4 import com.dyl.dao.impl.CompanyDaoJdbcImpl; 5 import com.dyl.dao.impl.DepDaoJdbcImpl; 6 import com.dyl.dao.impl.DutyDaoJdbcImpl; 7 import com.dyl.dao.impl.OneDsDaoJdbcImpl; 8 import com.dyl.dao.impl.StaffDaoJdbcImpl; 9 /** 10 * 工厂设计模式:为调用者提供符合接口要求的对象,方便我们以后采用框架技术进行底层数据访问。 11 * Title: 知识管理系统 12 * Description: 知识管理系统1.0 13 * Copyright: Copyright (c) 2010-2020 14 * Company:妖灵科技 15 * Created on 2014-7-7 16 * @author dyl 17 * @version 1.0 18 */ 19 public class Factory { 20 public static Object getInstance(String type) { 21 Object obj = null; 22 if ("IOneDsDAO".equals(type)) { 23 obj = new OneDsDaoJdbcImpl(); 24 25 } else if ("ICompanyDao".equals(type)) { 26 obj = new CompanyDaoImpl(); 27 28 } else if ("IDepDao".equals(type)) { 29 obj = new DepDaoJdbcImpl(); 30 } else if ("IDutyDao".equals(type)) { 31 obj = new DutyDaoJdbcImpl(); 32 } else if ("IStaffDao".equals(type)) { 33 obj = new StaffDaoJdbcImpl(); 34 } 35 return obj; 36 } 37 }
9、修改service接口。
1 package com.dyl.service; 2 3 import java.math.BigDecimal; 4 import java.util.List; 5 6 import com.dyl.entity.Company; 7 8 public interface ICompanyService { 9 public Company selectCompanyById(BigDecimal id);// 根据分公司id查找分公司 10 11 public List<Company> selectCompanys(String companyName);// 查找分公司 12 13 public void addCompany(Company company);// 增加分公司 14 15 public void updateCompany(Company company);// 修改分公司 16 17 public void deleteCompany(BigDecimal id);// 删除分公司 18 }
10、修改service实现类。
1 package com.dyl.service.impl; 2 3 import java.math.BigDecimal; 4 import java.util.List; 5 6 import com.dyl.dao.ICompanyDao; 7 import com.dyl.entity.Company; 8 import com.dyl.service.ICompanyService; 9 import com.dyl.util.Factory; 10 11 public class CompanyServiceImpl implements ICompanyService { 12 13 ICompanyDao dao=(ICompanyDao) Factory.getInstance("ICompanyDao"); 14 15 public Company selectCompanyById(BigDecimal id) { 16 return dao.selectCompanyById(id); 17 } 18 19 public List<Company> selectCompanys(String companyName) { 20 return dao.selectCompanys(companyName); 21 } 22 23 public void addCompany(Company company) { 24 dao.addCompany(company); 25 } 26 27 public void updateCompany(Company company) { 28 dao.updateCompany(company); 29 } 30 31 public void deleteCompany(BigDecimal id) { 32 dao.deleteCompany(id); 33 } 34 }
11、测试service实现类。
1 package com.dyl.test; 2 3 import java.util.List; 4 5 import com.dyl.entity.Company; 6 import com.dyl.service.ICompanyService; 7 import com.dyl.service.impl.CompanyServiceImpl; 8 9 public class CompanyServiceImplTest { 10 public static void main(String[] args) { 11 ICompanyService cs=new CompanyServiceImpl(); 12 List<Company>companys=cs.selectCompanys("%"); 13 System.out.println(companys.size()); 14 for(Company company:companys){ 15 System.out.println(company.getCompanyId().toString()+","+company.getCompanyName()+","+company.getAddress()); 16 } 17 } 18 }
12、工程结构图如下。
我们接下来需要完成:(1)修改控制层和显示层。(2)分页。(3)动态sql。(4)修改dep、duty、staff。(5)多表关联数据查询。OK,我们下次见。