• 个人知识管理系统Version1.0开发记录(09)


    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>
    View Code

    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>
    View Code

    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 }
    View Code

    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 }
    View Code

    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 }
    View Code

    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 }
    View Code

    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 }
    View Code

    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 }
    View Code

    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 }
    View Code

    12、工程结构图如下。

    我们接下来需要完成:(1)修改控制层和显示层。(2)分页。(3)动态sql。(4)修改dep、duty、staff。(5)多表关联数据查询。OK,我们下次见。

  • 相关阅读:
    Kali,CentOS 配置静态网络与开启SSH服务【附VMware中配置】
    httpHelper请求辅助类
    请求后的数据处理
    Viewcontroller基类
    上拉下拉基类
    获取cell中的button在整个屏幕上的位置
    Object-C反射读取实体属性和值
    xcode在代码中查找中文
    编写xcode5插件需要增加DVTPlugInCompatibilityUUIDs
    c# 扩展方法
  • 原文地址:https://www.cnblogs.com/youla/p/3828950.html
Copyright © 2020-2023  润新知