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配置文件或者一个预定义的配置类的实例获得。
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <typeAliases>
<typeAlias alias="Company" type="com.dyl.entity.Company"/>
<typeAlias alias="Dep" type="com.dyl.entity.Dep"/>
<typeAlias alias="Duty" type="com.dyl.entity.Duty"/>
<typeAlias alias="Staff" type="com.dyl.entity.Staff"/>
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:PKMS" />
<property name="username" value="DYL" />
<property name="password" value="DYL" />
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="com/dyl/entity/xml/Company.xml" /> </mappers> </configuration>

4、POJOs映射,Company.xml,实现数据的增删改查。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

 <?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.dyl.dao.ICompanyDao"> <select id="selectCompanyById" parameterType="BigDecimal" resultType="Company">
select * from company where companyid = #{id}
</select> <!-- 为了返回list 类型而定义的returnMap -->
<resultMap type="Company" id="resultListCompany">
<id column="companyId" property="companyId" />
<result column="companyName" property="companyName" />
<result column="address" property="address" />
<result column="telephone" property="telephone" />
<result column="leader" property="leader" />
<result column="mobilePhone" property="mobilePhone" />
<result column="remark" property="remark" />
</resultMap> <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
<select id="selectCompanys" parameterType="string" resultMap="resultListCompany">
select * from company where companyName like #{companyName} order by companyid
</select> <!--执行增加操作的SQL语句。id和parameterType分别与ICompanyDao接口中的addCompany方法的名字和参数类型一致。以#{name}的形式引用Company参数
的name属性,MyBatis将使用反射读取Company参数的此属性。#{name}中name大小写敏感。引用其他的gender等属性与此一致。useGeneratedKeys设置
为"true",表明要MyBatis获取由数据库自动生成的主键;keyProperty="companyid"指定把获取到的主键值注入到Company的companyid属性 -->
<insert id="addCompany" parameterType="Company" useGeneratedKeys="true" keyProperty="companyid">
insert into company(companyName,address,telephone,leader,mobilePhone,remark) values
(#{companyName},#{address},#{telephone},#{leader},#{mobilePhone},#{remark})
</insert> <update id="updateCompany" parameterType="Company">
update company set companyName=#{companyName},address=#{address},telephone=#{telephone},
leader=#{leader},mobilePhone=#{mobilePhone},remark=#{remark} where companyId=#{companyId}
</update> <delete id="deleteCompany" parameterType="BigDecimal">
delete from company where companyid=#{id}
</delete> </mapper>

5、namespace="com.dyl.dao.ICompanyDao",修改dao接口,描述参数和SQL语句的返回值。ICompanyDao里面的方法名,对应,Company.xml里面的id。

 package com.dyl.dao;

 import java.math.BigDecimal;
import java.util.List; import com.dyl.entity.Company;
/**
* Title: 知识管理系统
* Description: 知识管理系统1.0
* Copyright: Copyright (c) 2010-2020
* Company:妖灵科技
* Created on 2014-7-7
* @author dyl
* @version 1.0
*/
public interface ICompanyDao {
/**
* 根据分公司id查找分公司
* @param id
* @return
*/
public Company selectCompanyById(BigDecimal id);
/**
* 查找分公司
* @param companyName
* @return
*/
public List<Company> selectCompanys(String companyName);
/**
* 增加分公司
* @param company
*/
public void addCompany(Company company);
/**
* 修改分公司
* @param company
*/
public void updateCompany(Company company);
/**
* 删除分公司
* @param id
*/
public void deleteCompany(BigDecimal id); }

6、测试dao接口。

 package com.dyl.test;

 import java.io.Reader;
import java.math.BigDecimal;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.dyl.dao.ICompanyDao;
import com.dyl.entity.Company;
/**
* 测试类
* Title: 知识管理系统
* Description: 知识管理系统1.0
* Copyright: Copyright (c) 2010-2020
* Company:妖灵科技
* Created on 2014-7-7
* @author dyl
* @version 1.0
*/
public class CompanyXmlTest {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader; static {
try {
reader = Resources.getResourceAsReader("sqlMap-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
} public static SqlSessionFactory getSession() {
return sqlSessionFactory;
} /**
* 查找分公司
* @param companyName
*/
public void getCompanyList(String companyName){
SqlSession session = sqlSessionFactory.openSession();
try {
ICompanyDao companyDao=session.getMapper(ICompanyDao.class);
List<Company> companys = companyDao.selectCompanys(companyName);
for(Company company:companys){
System.out.println(company.getCompanyId().toString()+","+company.getCompanyName()+","+company.getAddress());
}
} finally {
session.close();
}
} /**
* 测试增加,增加后,必须提交事务,否则不会写入到数据库。
*/
public void addCompany(){
Company company=new Company();
company.setCompanyName("妖灵科技");
company.setAddress("四川成都");
company.setTelephone("028-88888888");
company.setLeader("妖灵");
company.setMobilePhone("18888888888");
company.setRemark("HO");
SqlSession session = sqlSessionFactory.openSession();
try {
ICompanyDao companyDao=session.getMapper(ICompanyDao.class);
companyDao.addCompany(company);
session.commit();
} finally {
session.close();
}
}
/**
* 先得到公司,然后修改,提交。
*/
public void updateCompany(){
SqlSession session = sqlSessionFactory.openSession();
try {
ICompanyDao companyDao=session.getMapper(ICompanyDao.class);
Company company=companyDao.selectCompanyById(new BigDecimal(2));
company.setAddress("北京");
companyDao.updateCompany(company);
session.commit();
} finally {
session.close();
}
} /**
* 删除数据,删除一定要commit。
* @param id
*/
public void deleteCompany(BigDecimal id){
SqlSession session = sqlSessionFactory.openSession();
try {
ICompanyDao companyDao=session.getMapper(ICompanyDao.class);
companyDao.deleteCompany(id);
session.commit();
} finally {
session.close();
}
} public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
ICompanyDao companyDao=session.getMapper(ICompanyDao.class); // // 根据分公司id查找分公司
// Company company=companyDao.selectCompanyById(new BigDecimal(5));
// System.out.println(company.getCompanyName());
// System.out.println(company.getAddress());
// System.out.println(); // // 查找分公司
// CompanyTest companyTest=new CompanyTest();
// companyTest.getCompanyList("%");
// System.out.println(); // 增加分公司
Company company=new Company();
company.setCompanyName("海口分公司");
company.setAddress("海南海口");
company.setTelephone("0898-88888888");
company.setLeader("碧波");
company.setMobilePhone("18888888888");
company.setRemark("东方夏威夷");
companyDao.addCompany(company);
session.commit();
System.out.println("当前增加的公司名称为:"+company.getCompanyName()); // // 修改分公司
// Company company=companyDao.selectCompanyById(new BigDecimal(4));
// company.setAddress("天津");
// company.setCompanyName("天津分公司");
// company.setLeader("闻其");
// company.setMobilePhone("18888888888");
// company.setRemark("首都门户");
// company.setTelephone("022-88888888");
// companyDao.updateCompany(company);
// session.commit();
// System.out.println("修改成功"); // // 删除分公司
// companyDao.deleteCompany(new BigDecimal(5));
// session.commit();
// System.out.println("删除成功"); } finally {
session.close();
}
}
}

7、修改dao实现类。

 package com.dyl.dao.impl;

 import java.io.Reader;
import java.math.BigDecimal;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.dyl.dao.ICompanyDao;
import com.dyl.entity.Company;
/**
* 数据持久层实现类
* Title: 知识管理系统
* Description: 知识管理系统1.0
* Copyright: Copyright (c) 2010-2020
* Company:妖灵科技
* Created on 2014-7-7
* @author dyl
* @version 1.0
*/
public class CompanyDaoImpl implements ICompanyDao{ private static SqlSessionFactory sqlSessionFactory;
private static Reader reader; static {
try {
reader = Resources.getResourceAsReader("sqlMap-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
} public static SqlSessionFactory getSession() {
return sqlSessionFactory;
} SqlSession session = sqlSessionFactory.openSession();
ICompanyDao companyDao=session.getMapper(ICompanyDao.class); public Company selectCompanyById(BigDecimal id) {
return companyDao.selectCompanyById(id);
} public List<Company> selectCompanys(String companyName) {
return companyDao.selectCompanys(companyName);
} public void addCompany(Company company) {
companyDao.addCompany(company);
session.commit();
session.close();
} public void updateCompany(Company company) {
companyDao.updateCompany(company);
session.commit();
session.close();
} public void deleteCompany(BigDecimal id) {
companyDao.deleteCompany(id);
session.commit();
session.close();
}
}

8、修改工厂。

 package com.dyl.util;

 import com.dyl.dao.impl.CompanyDaoImpl;
import com.dyl.dao.impl.CompanyDaoJdbcImpl;
import com.dyl.dao.impl.DepDaoJdbcImpl;
import com.dyl.dao.impl.DutyDaoJdbcImpl;
import com.dyl.dao.impl.OneDsDaoJdbcImpl;
import com.dyl.dao.impl.StaffDaoJdbcImpl;
/**
* 工厂设计模式:为调用者提供符合接口要求的对象,方便我们以后采用框架技术进行底层数据访问。
* Title: 知识管理系统
* Description: 知识管理系统1.0
* Copyright: Copyright (c) 2010-2020
* Company:妖灵科技
* Created on 2014-7-7
* @author dyl
* @version 1.0
*/
public class Factory {
public static Object getInstance(String type) {
Object obj = null;
if ("IOneDsDAO".equals(type)) {
obj = new OneDsDaoJdbcImpl(); } else if ("ICompanyDao".equals(type)) {
obj = new CompanyDaoImpl(); } else if ("IDepDao".equals(type)) {
obj = new DepDaoJdbcImpl();
} else if ("IDutyDao".equals(type)) {
obj = new DutyDaoJdbcImpl();
} else if ("IStaffDao".equals(type)) {
obj = new StaffDaoJdbcImpl();
}
return obj;
}
}

9、修改service接口。

 package com.dyl.service;

 import java.math.BigDecimal;
import java.util.List; import com.dyl.entity.Company; public interface ICompanyService {
public Company selectCompanyById(BigDecimal id);// 根据分公司id查找分公司 public List<Company> selectCompanys(String companyName);// 查找分公司 public void addCompany(Company company);// 增加分公司 public void updateCompany(Company company);// 修改分公司 public void deleteCompany(BigDecimal id);// 删除分公司
}

10、修改service实现类。

 package com.dyl.service.impl;

 import java.math.BigDecimal;
import java.util.List; import com.dyl.dao.ICompanyDao;
import com.dyl.entity.Company;
import com.dyl.service.ICompanyService;
import com.dyl.util.Factory; public class CompanyServiceImpl implements ICompanyService { ICompanyDao dao=(ICompanyDao) Factory.getInstance("ICompanyDao"); public Company selectCompanyById(BigDecimal id) {
return dao.selectCompanyById(id);
} public List<Company> selectCompanys(String companyName) {
return dao.selectCompanys(companyName);
} public void addCompany(Company company) {
dao.addCompany(company);
} public void updateCompany(Company company) {
dao.updateCompany(company);
} public void deleteCompany(BigDecimal id) {
dao.deleteCompany(id);
}
}

11、测试service实现类。

 package com.dyl.test;

 import java.util.List;

 import com.dyl.entity.Company;
import com.dyl.service.ICompanyService;
import com.dyl.service.impl.CompanyServiceImpl; public class CompanyServiceImplTest {
public static void main(String[] args) {
ICompanyService cs=new CompanyServiceImpl();
List<Company>companys=cs.selectCompanys("%");
System.out.println(companys.size());
for(Company company:companys){
System.out.println(company.getCompanyId().toString()+","+company.getCompanyName()+","+company.getAddress());
}
}
}

12、工程结构图如下。

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

个人知识管理系统Version1.0开发记录(09)的更多相关文章

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

    架 构 描 述 01.数据层,数据源,有形资源入库,无形资源整理,对外搜索引擎,对内平台搜索,数据类型(文字.图片.声音.视频.组合),数据时空优化,数据安全方案(数据进站关卡,数据出战关卡),数据并 ...

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

    第 一 步 做 什 么 我们该如何入手呢?先来看看目前常用的三个方法. 1.从事物产生的源头出发,层层推进,步步验证,最后开花结果.这种方法经常用于科研项目,或者三期以后的工程,国家政府项目用的较多. ...

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

    最近碰到个问题,在五个工作日内阅读一个百万行左右代码量的新项目集合,如何解决呢? 第一个工作日,环境观察.待在那个项目组,看项目成员们在做些什么事情,开发,测试,聊天,或多或少可以收集到一些项目相关的 ...

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

    物理分页 这次我们运用Mybatis拦截器来实现物理分页,后面会运用动态sql来实现,或者运用Map/CollectionUtils/StringUtils编写工具类来实现.oracle是运用的row ...

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

    模 块 复 用 原本还要测试一会的,突然出现一连串诡异的问题,比如,编译少加载个类啊,输入地址少个字母啊,改几行代码一改就是半小时啊.这是在提醒我们大脑疲倦了,所以果断小结,下次继续.这一次简单完成了 ...

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

    (1)匹配单个属性的关键字:(2)匹配单个对象的关键字:(3)匹配对象集合的关键字:(4)基于事件驱动的:(5)实时搜索,参考win7的搜索功能. 1.备份,java代码,数据库数据. 2.oracl ...

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

    切入点 前面,我们已经搭建好了web端的一种基本结构,需要进一步定位的主要问题有三点: 1.界面的选择和确定,用extjs做的初步样式,进一步改动为jqueryUI/html,再进一步改变为HTML5 ...

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

    demo controller我们从前面的实现过程可以得出三种普遍使用的信息处理方式:1.操作数据库,对数据进行增删改查,比如运用sqldevloper查看数据信息.2.运用计算机程序语言,对数据进行 ...

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

    demo view 夜已深,我们先简单演示一下,完成一个小段落了.涉及工具及技术知识:图形处理软件photoshop cs6,js类库ext. 思路如下: 1.下载ps6,有破解版本的,dll文件覆盖 ...

随机推荐

  1. In ZeroDB, the client is responsible for the database logic. Data encryption, decryption, and compression also happen client side. Therefore, the server never has any knowledge about the data, its str

    zerodb/index.rst at master · zerodb/zerodb https://github.com/zerodb/zerodb/blob/master/docs/source/ ...

  2. 设计模式之——Chain of Responsibility

    Chain of Responsibility模式又叫做责任链模式,是将多个对象组成一条职责链,然后按照职责链上的顺序一个一个的找出是谁来负责处理. 这个模式很简单,下面就是一个实例程序,有六个处理器 ...

  3. Supermarket---poj456(贪心并查集优化)

    题目链接:http://poj.org/problem?id=1456 题意是现有n个物品,每个物品有一个保质期和一个利润,现在每天只能卖一个商品,问最大的利润是多少,商品如果过期了就不能卖了: 暴力 ...

  4. git-【二】本地git操作提交、版本回退

    一.创建版本库,提交文件 什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任 ...

  5. 离线状态 Postman不能开启Postman Interceptor解决

    目前的postman插件如果想正常使用,必须安装Postman Interceptor插件,这样才能直接使用chrome浏览器的cookie等信息,否则postman是无法完成老版本的功能的. 直接使 ...

  6. mysql中的多行查询结果合并成一个(转)

    SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 ...

  7. ubuntu 用法

    1:改变某一个目录的拥有者 sudo chown -hR user:user ./目录名    //     user:user  用户名:组名 sudo chmod  777 文件     //给文 ...

  8. 常微分方程初值问题:多步预测-修正方法 [MATLAB]

    #先上代码后补笔记# #可以直接复制粘贴调用的MATLAB函数代码!# 1. 亚当斯(Adams)预测-修正算法 由亚当斯-巴什福特(Adams-Bashforth)显式预测公式和亚当斯-莫顿(Ada ...

  9. 问题:ORA-28000: the account is locked 用户锁住了。

    打开cmd: 执行 sqlplus /nolog 执行conn / as sysdba 执行 ALTER USER  username  ACCOUNT UNLOCK;

  10. Jedis连接池

    jedis是官方首选的java客户端开发包 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Ja ...