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. 使用C#和HtmlAgilityPack解析HTML

    近期,有一个需求,需要解析HTML页面,读取一些需要的数据后,插入本地数据库.我知道可以通过正则表达式实现,然而正则表达式之于我,就像汇编语言之于我,一样.我知道它是干什么的,我也知道它能干什么,但是 ...

  2. Python开发【笔记】:git&github 快速入门

    github入门 简介: 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大 ...

  3. matplotlib-折线图、散点图

    (一)折线图小结 1.设置图片大小(想要一个高清无码大图) # 图大小 plt.figure(figsize=(20, 8), dpi=80) 2.保存到本地 # 设置图片大小 plt.figure( ...

  4. mysql 数据操作 单表查询 练习

    查出所有员工的名字,薪资,格式为 <名字:egon>,<薪资:3000> mysql> select concat('<姓名:',name,'>') as n ...

  5. C# 反双曲余弦函数

    反双曲余弦函数的定义是: T1 = Math.Log(t + Math.Sqrt(t * t - 1)); 1. 叉乘(cross product),也叫向量的外积.向量积.顾名思义,求下来的结果是一 ...

  6. Shader工具

    1. RenderMonkey 2. NVIDIA FX Composer 2.5

  7. 数据挖掘-KNN-K最近邻算法

    1. 算法核心思想: 通过计算每个训练样本到待分类样本的距离,选取和待分类样本的距离最近的 K 个训练样本,K个样本中那个类别的训练样本占据着多数, 则表明待分类的样本就属于哪一个类别. KNN算法在 ...

  8. IP地址与子网掩码的计算

    128.0.0.0=1 192.0.0.0=2224.0.0.0=3 240.0.0.0=4 248.0.0.0=5 252.0.0.0=6 254.0.0.0=7 255.0.0.0=8255.12 ...

  9. chrome 关闭安全模式

    chrome.exe --disable-web-security --user-data-dir

  10. 【转载】JS Number类型数字位数及IEEE754标准

    JS的基础类型Number,遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bit.如图 意义 1位用来表示符号位 11位用来表示指数 52位表示尾数 浮 ...