MyBatis的应用
a)首先先导入固定的jar包
b)添加mybatis配置文件mybatis-config.xml
1、添加mybatis配置文件mybatis-config.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>
<settings>
<setting name="cacheEnabled" value="true" /> <!-- 缓存 -->
<setting name="useGeneratedKeys" value="true" /> <!-- 自动获取主键 -->
<setting name="defaultExecutorType" value="REUSE" />
</settings>
<!-- 配置别名 -->
<typeAliases>
<typeAlias alias="User" type="com.sdtg.system.bean.User"/>
<typeAlias alias="Dept" type="com.sdtg.system.bean.Dept"/>
<typeAlias alias="UserDept" type="com.sdtg.system.bean.UserDept"/>
<typeAlias alias="Module" type="com.sdtg.system.bean.Module"/>
<typeAlias alias="Privilege" type="com.sdtg.system.bean.Privilege"/>
<typeAlias alias="Role" type="com.sdtg.system.bean.Role"/>
<typeAlias alias="RolePrivilege" type="com.sdtg.system.bean.RolePrivilege"/>
<typeAlias alias="OperateLog" type="com.sdtg.system.bean.OperateLog"/>
<typeAlias alias="UserPrivilege" type="com.sdtg.system.bean.UserPrivilege"/>
<typeAlias alias="WorkPlan" type="com.sdtg.plan.bean.WorkPlan"/>
<typeAlias alias="Notepad" type="com.sdtg.office.bean.Notepad"/>
<typeAlias alias="Onduty" type="com.sdtg.office.bean.Onduty"/>
<typeAlias alias="Company" type="com.sdtg.contacts.bean.Company"/>
<typeAlias alias="News" type="com.sdtg.contacts.bean.News"/>
<typeAlias alias="Customer" type="com.sdtg.contacts.bean.Customer"/>
<typeAlias alias="Files" type="com.sdtg.file.bean.Files"/>
</typeAliases>
<!-- 配置mappers -->
<!-- mappers元素是包含所有mapper(映射器)的列表,这些mapper的XML文件包含SQL代码和映射定义信息。 -->
<mappers>
<mapper resource="com/sdtg/system/dao/User.xml"/>
<mapper resource="com/sdtg/system/dao/Dept.xml"/>
<mapper resource="com/sdtg/system/dao/Module.xml"/>
<mapper resource="com/sdtg/system/dao/Privilege.xml"/>
<mapper resource="com/sdtg/system/dao/Role.xml"/>
<mapper resource="com/sdtg/system/dao/OperateLog.xml"/>
<mapper resource="com/sdtg/plan/dao/WorkPlan.xml"/>
<mapper resource="com/sdtg/office/dao/Notepad.xml"/>
<mapper resource="com/sdtg/office/dao/Onduty.xml"/>
<mapper resource="com/sdtg/contacts/dao/Company.xml"/>
<mapper resource="com/sdtg/contacts/dao/News.xml"/>
<mapper resource="com/sdtg/contacts/dao/Customer.xml"/>
<mapper resource="com/sdtg/file/dao/Files.xml"/>
</mappers>
</configuration>
2、创建对应的实体对象
对应的java代码
package com.sdtg.contacts.bean; import java.io.Serializable; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity
@Table(name = "company") // 映射数据库中表的表名
public class Company implements Serializable { private static final long serialVersionUID = -7746115557660768065L; @Id
@Column(name = "c_id") //映射company表的c_id列
@GenericGenerator(name = "idGenerator", strategy = "identity")//name属性指定生成器名称,strategy属性指定具体生成器的类名。
@GeneratedValue(generator = "idGenerator")
private Integer id;//主键 @Column(name = "c_name")
private String name;//名称 @Column(name = "c_address")
private String address;//地址 @Column(name = "c_tel")
private String tel;//电话 public Company() {
super();
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getTel() {
return tel;
} public void setTel(String tel) {
this.tel = tel;
} }
3、创建接口和对应的定义操作company表的sql映射文件Company.xml(以company为例)
接口提供简单的增删改查数据的信息
package com.sdtg.contacts.dao; import java.util.List;
import java.util.Map; import org.springframework.stereotype.Repository; import com.sdtg.contacts.bean.Company; @Repository //标注一个DAO类组件类
public interface CompanyDao { /**
* 查询
* @param map
* @return
*/
public abstract List<Company> find(Map<String, Object> map); /**
* 分页查询
* @param map
* @return
*/
public abstract List<Company> findPage(Map<String, Object> map); /**
* 查询条数
* @param map
* @return
*/
public abstract Integer findCount(Map<String, Object> map); /**
* id查询
* @param id
* @return
*/
public abstract Company findById(Integer id); /**
* 添加
* @param company
*/
public abstract void add(Company company); /**
* 删除
* @param id
*/
public abstract void delete(Integer id); /**
* 修改
* @param company
*/
public abstract void update(Company company); }
Company.xml文件运用sql语句进行对数据信息的增删改查
<?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.sdtg.contacts.dao.CompanyDao"> <!-- 字段 -->
<sql id="field">
c.c_id as 'id',
c.c_name as 'name',
c.c_address as 'address',
c.c_tel as 'tel'
</sql> <!-- 条件 -->
<sql id="sql">
<if test="name != null and name != ''">
and (c.c_name like '%${name}%' or c.c_address like '%${name}%' or c.c_tel like '%${name}%')
</if>
</sql> <!-- 查询 -->
<select id="find" parameterType="Map" resultType="Company">
select <include refid="field"/>
from company c
where 1=1 <include refid="sql"/>
order by c.c_id desc
</select> <!-- 分页查询 -->
<select id="findPage" parameterType="Map" resultType="Company">
select <include refid="field"/>
from company c
where 1=1 <include refid="sql"/>
order by c.c_id desc
limit ${startIndex}, ${pageSize}
</select> <!-- 查询条数 -->
<select id="findCount" parameterType="Map" resultType="Integer">
select count(c.c_id)
from company c
where 1=1 <include refid="sql"/>
</select> <!-- id查询 -->
<select id="findById" parameterType="Integer" resultType="Company">
select <include refid="field"/>
from company c
where c.c_id = #{id}
</select> <!-- 添加 -->
<insert id="add" parameterType="Company">
insert into company(
c_name,
c_address,
c_tel
)values(
#{name},
#{address},
#{tel}
)
</insert> <!-- 删除 -->
<delete id="delete" parameterType="Integer">
delete from company where c_id = #{id}
</delete> <!-- 修改 -->
<update id="update" parameterType="Company">
update company
<set>
<if test="name != null">
c_name = #{name},
</if>
<if test="address != null">
c_address = #{address},
</if>
<if test="tel != null">
c_tel = #{tel},
</if>
</set>
where c_id = #{id}
</update> </mapper>
然后映射到mybatis-config.xml配置文件
我连接数据库是运用spring配置文件来连接数据库,运用sqlsessionFactory
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 启用Spring注解 -->
<context:annotation-config/> <!-- 自动扫描注解类 -->
<context:component-scan base-package="com.sdtg"/> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 自动扫描Mapper接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.sdtg"/>
</bean> <!-- 数据源 在spring里面配置数据库 -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean> <!-- Sql Session工厂 --><!-- 映射到mybatis.xml文件-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean> <!-- Sql Session -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean> <!-- hibernate 映射实体类里面,用注解的方式实现自动建表的功能 -->
<bean id="sessionFactory" name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.sdtg" />
<property name="hibernateProperties">
<props>
<!-- Hibernate方言 -->
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<!-- 是否输出Sql语句 -->
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<!-- 当前Session策略类 -->
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
<!-- 格式化Sql语句 -->
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<!-- 开启后,Hibernate将收集有助于性能调节的统计数据 -->
<prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
<!-- 自动创建数据库表 -->
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
</props>
</property>
</bean> <!-- 事物 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/> </beans>
补充:
service和控制层的源码
package com.sdtg.contacts.service; import java.util.List;
import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.sdtg.contacts.bean.Company;
import com.sdtg.contacts.dao.CompanyDao;
import com.sdtg.utils.ConvertUtils;
import com.sdtg.utils.Page; @Service //标注一个业务逻辑组件类
@Transactional
public class CompanyService { @Resource
private CompanyDao dao; /**
* 查询
* @param map
* @return
*/
public List<Company> find(Map<String, Object> map){
try { return dao.find(map);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* 分页查询
* @param map
* @return
*/
public Page<Company> findPage(Map<String, Object> map){
try {
Page<Company> page = new Page<Company>();
page.setTotalCount(dao.findCount(map));
page.setCurrPage(ConvertUtils.stringToInteger(map.get("currPage").toString()));
map.put("startIndex", page.getStartIndex());
map.put("pageSize", page.getPageSize());
page.setList(dao.findPage(map));
return page;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* id查询
* @param id
* @return
*/
public Company findById(Integer id){
try {
return dao.findById(id);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* 添加
* @param company
*/
public Boolean add(Company company){
try {
dao.add(company);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} /**
* 删除
* @param id
*/
public Boolean delete(Integer id){
try {
dao.delete(id);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} /**
* 修改
* @param company
*/
public Boolean update(Company company){
try {
dao.update(company);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
控制层:
package com.sdtg.contacts.controller; import java.util.HashMap;
import java.util.Map; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; import com.sdtg.contacts.bean.Company;
import com.sdtg.contacts.service.CompanyService;
import com.sdtg.system.service.OperateLogService;
import com.sdtg.utils.Page; @Controller //类似Struts的Action,标注一个控制器组件类
public class CompanyController { @Resource //命名为'setCompanyService'的方法被用来处理名为'ompanyService'的属性。
private CompanyService companyService; @Resource
private OperateLogService operateLogService; /**
* 查询公司
* @param request
* @param result
* @param currPage
* @param name
* @return
*/
@RequestMapping(value = "companyList") // 请求url地址映射,类似Struts的actiohn-mapping,直接将返回值返回到页面
public ModelAndView companyList(HttpServletRequest request, String result, String currPage, String name){
// request和response不必非要出现在方法中,如果用不上的话可以去掉
// 参数的名称是与页面控件的name相匹配,参数类型会自动被转换
System.out.println("进入查询功能"); ModelAndView mav = new ModelAndView();
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", name); //在jsp页面中可直通过${name}获得到值, map.put()相当于request.setAttribute方法。
map.put("currPage", currPage != null ? currPage : 1); Page<Company> page = companyService.findPage(map);
mav.addObject("companyList",page.getList());
System.out.println("进入分页查询");
mav.addObject("page",page); mav.addObject("result",result);//增删改的结果
//返回查询条件
mav.addObject("name",name); mav.setViewName("contacts/company");
return mav; //
} /**
* 添加公司
* @return
*/
@RequestMapping(value = "companyAdd")
public ModelAndView companyAdd(){
ModelAndView mav = new ModelAndView();
mav.setViewName("contacts/company_form");
return mav;
} /**
* 修改公司
* @param id
* @return
*/
@RequestMapping(value = "companyUpdate")
public ModelAndView companyUpdate(Integer id){
// 同样支持参数为表单对象,类似于Struts的ActionForm,Integer id不需要任何配置,直接写即可
ModelAndView mav = new ModelAndView(); // 采用重定向方式跳转页面
mav.addObject("company", companyService.findById(id));
mav.setViewName("contacts/company_form");
return mav;
} /**
* 保存公司
* @param request
* @param company
* @return
*/
@RequestMapping(value = "companySave")
public ModelAndView companySave(HttpServletRequest request, Company company){
ModelAndView mav = new ModelAndView();
Boolean flag;
if(null == company.getId()){//添加
flag = companyService.add(company);
operateLogService.add(request, "添加公司:"+company.getName());
} else {//修改
flag = companyService.update(company);
operateLogService.add(request, "修改公司:id="+company.getId());
}
mav.setViewName("redirect:companyList.do?result="+flag);
return mav;
} /**
* 删除公司
* @param request
* @param id
* @return
*/
@RequestMapping(value = "companyDelete")
public ModelAndView companyDelete(HttpServletRequest request, Integer id){
ModelAndView mav = new ModelAndView();
Boolean flag = companyService.delete(id);
if(flag){
operateLogService.add(request, "删除公司:id="+id);
}
mav.setViewName("redirect:companyList.do?result="+flag);
return mav;
} }
MyBatis的应用的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- mybatis plugins实现项目【全局】读写分离
在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...
- MyBatis基础入门--知识点总结
对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- MyBatis源码分析(一)开篇
源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...
- (整理)MyBatis入门教程(一)
本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...
- MyBatis6:MyBatis集成Spring事物管理(下篇)
前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...
随机推荐
- id生成策略 id工具类
import java.util.Random; /** * 各种id生成策略 * <p>Title: IDUtils</p> * <p>Description: ...
- 关系与导航属性(摘自微软MSDN)
关系与导航属性 本主题概述实体框架如何管理实体间的关系.还对如何映射和操作关系提供了一些指南. 关系.导航属性和外键 在关系数据库中,表之间的关系(也称为关联)是通过外键定义的.外键 (FK) 是用于 ...
- golang下的grpc
facebook的thrift也是开源rpc库,性能高出grpc一倍以上,grpc发展的较晚,期待以后有长足的进步.简单来说thrift = grpc + protobuf gRPC基于HTTP/2标 ...
- Zookeeper
Zookeeper有个客户端,可以上传文件数据.然后Zookeeper有一个数据结构.像一种树.Zookeeper的主要作用有:维护配置文件(实时更新),选举leader(选举机制),感知节点(数据结 ...
- Python range() xrange()
range 前面小节已经说明了,range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. xrange用法与 range 完全 ...
- Python Iterable Iterator Yield
可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list / tuple / dict / set / str /等(对于这类iterable的对象,因为你可以按照你的意愿进行重 ...
- 自动化运维:flask-bootstrap + highstock整合
1.在flask-bootstrap的base.html模板中加载highstock.js 以下是base.html的源码中,调用js文件的例子. 文件路径:python2.7/site-p ...
- 在ASP.NET Web API中使用OData
http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...
- 重置mysql数据库密码
# /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & # my ...
- STM32F4读写内部FLASH【使用库函数】
STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...