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的事物的做法,本文的目的是在这个的基 ...
随机推荐
- win32程序通过LPCREATESTRUCT中的lpCreateParams传递参数给窗口过程函数
win32窗口程序中如果需要给窗口过程函数传递自定义参数,可以通过LPCREATESTRUCT结构体中的lpCreateParams进行传递. 创建窗口实例函数: m_hWnd = CreateWin ...
- (转)AppiumLibrary基本操作
*** Settings *** Library AppiumLibrary Library Collections Library String Library Dialogs *** Test C ...
- 【转】FPGA内部小数计算
FPGA内部计算小数 [转载] 谓定点小数,就是小数点的位置是固定的.我们是要用整数来表示定点小数,由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了).既然没有 ...
- Ext.Net 学习随笔 002 默认按钮
在FormPanel中按回车按键,会触发默认按钮的click事件.设置方法为在FormPanel中设置DefaultButton属性,如果没有设置这个属性,默认为最后一个按钮. 1.缺省最后一个按钮为 ...
- 数位DP之奥义
恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...
- liunx之:解决liunx下dns配置重启失效的问题
有时候能ping同ip地址,却ping不通域名,这就是dns没有配置的缘故. 但是DNS配置文件 /etc/resolv.conf 每次重启就会失效. 打开这个配置文件,发现有注释提示: Dynami ...
- Unity进阶技巧 - 动态创建UGUI
前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...
- 验证视图状态MAC失败。如果此应用程序由网络场或群集承载,请确保配置指定了相同的validationKey和验证算法(转)
原文转自:http://www.cnblogs.com/Setme/archive/2012/06/05/2537084.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 ...
- 11、java中的模板方法设计模式
/* 需求:获取一段程序运行的时间. 原理:获取程序开始和结束的时间并相减即可. 获取时间:System.currentTimeMillis(); 当代码完成优化后,就可以解决这类问题. 这种方式,模 ...
- ios 写项目的时候遇到的问题及解决方案(1)
1.解决headerView不随cell一起滚动的问题 解决方案:myHeaderView为自己创建的view加在tableHeadView上, self.tableView.tableHeadVie ...