一、知识点回顾

  1、Mybatis环境搭建(DAO层的实现)(使用maven项目管理工具)

  需要引入的依赖包:

<!-- 单元测试junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.3</version>
<scope>test</scope>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.2</version>
</dependency>
<!-- mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.43</version>
</dependency>

    核心配置文件:configuration.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>
<properties resource="database.properties"></properties>
<typeAliases>
<package name="cn.tengyu.entity"/>
</typeAliases>
<!--数据库的连接信息-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接属性-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="cn.tengyu.dao"/>
</mappers>
</configuration>

    Mapper.xml

<?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="cn.tengyu.dao.DeptMapper">
<!--查询记录数-->
<select id="count" resultType="int">
SELECT count(1) as count FROM dept
</select>
<select id="findAll" resultType="Dept">
SELECT * FROM dept
</select>
<select id="findByName" resultType="Dept" parameterType="String">
SELECT * FROM dept WHERE deptname=#{deptname}
</select> <!--查询某部门员工信息-->
<resultMap id="empList" type="Emp">
<id property="empno" column="empno"/>
</resultMap>
<select id="findByDeptName" parameterType="String" resultMap="empList">
SELECT emp.* FROM emp,dept WHERE dept.deptno=emp.deptno
AND deptname like concat ('%',#{detname},'%')
</select>
<!--添加修改部门信息-->
<insert id="addDeptByName" parameterType="string">
INSERT INTO dept(deptname)VALUES (#{deptname})
</insert>
<insert id="addDept" parameterType="Dept">
INSERT INTO dept(deptno,deptname)VALUES (#{deptno},#{deptname})
</insert>
<!--删除部门信息-->
<delete id="delDept" parameterType="int">
DELETE FROM dept WHERE deptno=#{deptno}
</delete>
<!--修改数据-->
<update id="modifyDept" parameterType="string">
UPDATE dept SET deptname=#{newdeptname} WHERE deptname=#{deptname}
</update>
</mapper>

    MybatisUtil.java

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 java.io.IOException;
import java.io.InputStream; public class MybatisUtil {
static SqlSessionFactory factory;
static SqlSession sqlSession; /**
* 初始化SqlSessionFactory对象
*/
static {
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 创建SqlSession对象
*
* @return
*/
public static SqlSession createSqlSession() {
sqlSession = factory.openSession(false);
return sqlSession;
} public static void closeSqlSession(SqlSession sqlSession) {
if (sqlSession != null) {
sqlSession.close();
}
}
}

    测试(使用mybatis实现增删改查)

private static Logger logger = Logger.getLogger(DeptMapperTest.class);
@Test
public void getCount(){
SqlSession sqlSession = MybatisUtil.createSqlSession();
int count = sqlSession.selectOne("cn.tengyu.dao.DeptMapper.count");
logger.debug("部门表总记录数:"+count);
sqlSession.close();
}
@Test
public void findAll(){
SqlSession sqlSession = MybatisUtil.createSqlSession();
List<Dept> depts = sqlSession.selectList("cn.tengyu.dao.DeptMapper.findAll");
for (Dept dept :depts) {
logger.debug("编号:"+dept.getDeptno()+"\t名称:"+dept.getDeptname());
}
sqlSession.close();
}
@Test
public void findByName(){
SqlSession sqlSession = MybatisUtil.createSqlSession();
try {
Dept dept = sqlSession.getMapper(DeptMapper.class).findByName("公关部");
logger.debug("编号:"+dept.getDeptno()+"\t名称:"+dept.getDeptname());
sqlSession.close();
} catch (Exception e) {
logger.debug("查询结果为空!!!");
e.printStackTrace();
}
} @Test
public void findByDeptName(){
SqlSession sqlSession = MybatisUtil.createSqlSession();
List<Emp> emps = sqlSession.getMapper(DeptMapper.class).findByDeptName("广告");
for (Emp emp :emps) {
logger.debug("编号:"+emp.getEmpno()+"\t姓名:"+emp.getEmpname());
}
sqlSession.close();
}
@Test
public void addDeptByName(){
SqlSession sqlSession = MybatisUtil.createSqlSession();
int i = sqlSession.getMapper(DeptMapper.class).addDeptByName("XXX");
if (i>0){
sqlSession.commit();
logger.debug("添加数据成功"+i+"条");
}
sqlSession.close();
this.findAll();
}
@Test
public void addDept(){
SqlSession sqlSession = MybatisUtil.createSqlSession();
Dept dept = new Dept();
dept.setDeptno(1);
dept.setDeptname("娱乐部");
try {
int i = sqlSession.getMapper(DeptMapper.class).addDept(dept);
if (i>0){
sqlSession.commit();
logger.debug("添加数据成功"+i+"条");
}
} catch (Exception e) {
sqlSession.rollback();
logger.debug("数据添加失败!");
e.printStackTrace();
} finally {
MybatisUtil.closeSqlSession(sqlSession);
}
this.findAll();
}
@Test
public void delDept(){
SqlSession sqlSession = MybatisUtil.createSqlSession();
try {
int i = sqlSession.getMapper(DeptMapper.class).delDept(12);
if (i>0){
sqlSession.commit();
logger.debug("删除数据成功"+i+"条");
}
} catch (Exception e) {
sqlSession.rollback();
logger.debug("数据删除失败!");
e.printStackTrace();
} finally {
MybatisUtil.closeSqlSession(sqlSession);
}
this.findAll();
}
@Test
public void modifyDept(){
SqlSession sqlSession = MybatisUtil.createSqlSession();
try {
int i = sqlSession.getMapper(DeptMapper.class).modifyDept("测试部", "销售部");
if (i>0){
sqlSession.commit();
logger.debug("修改数据成功"+i+"条");
}
} catch (Exception e) {
sqlSession.rollback();
logger.debug("修改数据失败!!!");
e.printStackTrace();
} finally {
MybatisUtil.closeSqlSession(sqlSession);
}
}

  2.Spring框架搭建

    依赖的jar包:(maven添加以下依赖即可)

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.3</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.43</version>
</dependency>

    多种数据源的引用:

<!--添加数据源-->
<!--spring JDBCTemplate-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>
<!--dbcp 数据源-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--c3p0-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>

    DAO层实现:(为了使用getJdbcTempalte()方法需要注入/实现JdbcDaoSupport接口)

import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List; public class NewsDaoImpl extends JdbcDaoSupport implements INewsDao {
@Override
public List<News> findAll() {
String sql = "SELECT * FROM infosm_news";
List<News> list = getJdbcTemplate().query(sql, new RowMapper<News>() {
@Override
public News mapRow(ResultSet rs, int rowNum) throws SQLException {
News news = new News();
news.setNewsid(rs.getInt("newsid"));
news.setNewstitle(rs.getString("newstitle"));
news.setNewscontent(rs.getString("newscontent"));
news.setClickcount(rs.getInt("clickcount"));
return news;
}
});
return list;
}
}

    核心配置文件:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--通过bean元素生命需要Spring创建的实例。该实例的类型通过class属性指定,
并通过id属性为该实例制定一个名称,以便于访问-->
<!--DataSource jdbc-->
<bean id="dateSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///infosm"/>
<property name="username" value="root"/>
<property name="password" value="tengyu"/>
</bean>
<!--DataSource druid-->
<!--<bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///infosm"/>
<property name="username" value="root"/>
<property name="password" value="tengyu"/>
</bean>-->
<!--DataSource c3p0-->
<!--<bean id="dateSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql:///infosm"/>
<property name="user" value="root"/>
<property name="password" value="tengyu"/>
</bean>-->
<!--DataSource dbcp-->
<!--<bean id="dateSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///infosm"/>
<property name="username" value="root"/>
<property name="password" value="tengyu"/>
</bean>-->
<!--jdbcTemplate-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dateSource"/>
</bean>
<!--newsDao-->
<bean id="newsDao" class="cn.infosm.dao.impl.NewsDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<!--newsService-->
<bean id="newsService" class="cn.infosm.service.impl.NewsServiceImpl">
<property name="dao" ref="newsDao"/>
</bean>
<!--talkDao-->
<bean id="talkDao" class="cn.infosm.dao.impl.TalkDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<!--talkService-->
<bean id="talkService" class="cn.infosm.service.impl.TalkServiceImpl">
<property name="dao" ref="talkDao"/>
</bean>
</beans>

    正常测试即可:

@Test
public void findAllNews(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
INewsService newsService = (INewsService) context.getBean("newsService");
List<News> list = newsService.findAll();
for (News news :list) {
System.out.println(news.getNewstitle());
} } @Test
public void findAllTalks(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ITalkService talkService = (ITalkService) context.getBean("talkService");
List<Talk> list = talkService.findAll();
for (Talk talk :list) {
System.out.println(talk.getTid()+talk.getContent()+talk.getTalktime());
} }

Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)的更多相关文章

  1. Spring学习笔记四 整合SSH

    三大框架架构(整合原理) 步骤1:导包 Hibernate包 1.Hibernate包,hibernate/lib/required 2.hibernate/lib/jpa | java persis ...

  2. Spring学习笔记(二) 初探Spring

    版权声明 笔记出自<Spring 开发指南>一书. Spring 初探 前面我们简单介绍了 Spring 的基本组件和功能,现在我们来看一个简单示例: Person接口Person接口定义 ...

  3. Spring学习笔记(1)——初识Spring

    一.Spring是什么       通常说的Spring其实指的是Spring Framework,它是Spring下的一个子项目,Spring围绕Spring Framework这个核心项目开发了大 ...

  4. Spring学习笔记之整合struts

    1.现有项目是通过 <action    path="/aaaaAction"                type="org.springframework.w ...

  5. Spring学习笔记之整合hibernate

    1.web.xml里边要配置好对应的springxml的路径 <context-param> <param-name>contextConfigLocation</par ...

  6. Spring 学习笔记之整合Hibernate

    Spring和Hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心SQ ...

  7. 【Spring学习笔记-1】Myeclipse下Spring环境搭建

    *.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...

  8. Spring 学习笔记(一):Spring 入门

    1 Spring简介 Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,是一个分层的Java SE/EE ful ...

  9. Spring学习笔记之四----基于Annotation的Spring AOP编程

    你能使用@Aspect annotation将某个Java类标注为Aspect,这个Aspect类里的所有公有方法都可以成为一个Advice,Spring提供了5个Annotation去将某个方法标注 ...

  10. Spring学习笔记之三----基于Annotation的Spring IOC配置

    使用Annotation 来创建Bean有两种方式 在配置类中创建bean(配置类是指标注为@Configuration的类),在配置类中每一个创建bean的方法都应该标注为@Bean,可以在@Bea ...

随机推荐

  1. TOMCAT在POST方法提交参数丢失问题

    最近写程序发现post参数接收不到了,jdk,eclipse,jar包,换了多次都不行,后来看到网上一篇文章: 随后设置Tomcat中POST方式提交数据大小: maxPostSize="0 ...

  2. js返回上一级代码和刷新页面代码

    返回上一级代码: <a href="javascript:;" onclick="history.go(-1);" class="icon_ba ...

  3. PHP函数补完:call_user_func()

    call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数,下面总结下这个函数的使用方法. 1,call_user_func函数类似于一种特别的调用函数的方法,使用 ...

  4. jquery源码解析:proxy,access,swap,isArraylike详解

    jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... guid: 1, //唯一标识符 ...

  5. UITableView定制左滑效果

    UITableViewRowAction类 object defines a single action to present when the user swipes horizontally in ...

  6. 题目1008:最短路径问题(SPFA算法)

    问题来源 http://ac.jobdu.com/problem.php?pid=1008 问题描述 给定一个G(V,E)有向图,起点s以及终点t,求最短路径. 问题分析 典型的单源最短路径问题,可以 ...

  7. P01-Python中列表的复制问题

    (1)使用=直接赋值 a = [1, 2, 3, [6, 7]] b = a 初始情况: a: [1, 2, 3, [6, 7]] b: [1, 2, 3, [6, 7]] ------------- ...

  8. POJ_2886 Who Gets the Most Candies? 【二分+树状数组】

    一.题目 POJ2886 二.分析 这个题目吧,开始没读懂,做的时候也没懂,WA的时候懂了.假设是第p个出圈的人有一个对应的因子个数$F(p)$,那么,题目求的就是这个$F(p)$最大的对应的人. 1 ...

  9. 128th LeetCode Weekly Contest Capacity To Ship Packages Within D Days

    A conveyor belt has packages that must be shipped from one port to another within D days. The i-th p ...

  10. 使用Jmeter进行http接口性能测试(转载)

    在进行网页或应用程序后台接口开发时,一般要及时测试开发的接口能否正确接收和返回数据,对于单次测试,Postman插件是个不错的Http请求模拟工具. 但是Postman只能模拟单客户端的单次请求,而对 ...