ssh三大框架整合(2)

注:由整合(续):

所有的配置文件在哪里找的都会 一 一详解

支持hibernate,并完成简单的查询操作

  • 拷jar包

    1. 找到你的框架源文件--->\hibernate-release-5.2.2.Final\hibernate-release-5.2.2.Final\lib\required
    2. 只需要copy----》required里的所有jar包即可
    3. 删除重复jar包(留高版本删低版本)
  • 添加hibernate的核心配置文件

    1. 在src的根目录下创建一个xml文件(一般名字为:hibernate.cfg.xml)---->是可以随意取名字的
    2. 复制hibernate所需要的DTD--->找到框架源文件下的hibernate.cfg.xml---->(hibernate-release-5.2.2.Final\hibernate-release-5.2.2.Final\project\etc\hibernate.cfg.xml)拷贝头上的DTD----其他的一律不要
    3. 配置核心文件
    4. <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE hibernate-configuration PUBLIC
      	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
      <hibernate-configuration>
      	<session-factory>
      		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ssh</property>
      		<property name="hibernate.connection.username">root</property>
      		<property name="hibernate.connection.password">root</property>
      		<!-- 官方语言 -->
      		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      		<!-- sql语句 -->
      		<property name="hibernate.show_sql">true</property>
      		<!-- 格式化 -->
      		<property name="hibernate.format_sql">true</property>
      		<!-- 自动更新表结构 -->
      		<property name="hibernate.hbm2ddl.auto">update</property>
      		
      		<!-- 引入映射文件 -->
      		<mapping resource="/com/bjsxt/user/pojo/AUser.hbm.xml"/>
      	</session-factory>
      </hibernate-configuration>
    5. 解释:
      • hibernate-configguration为hibernate配置文件的根节点
      • 主要是配置session-factory:相当于jdbc里面的connection,就是一个链接数据的链接池
      • property:属性是配置参数(链接数据的参数)----》所有的键值对都是从\hibernate-release-5.2.2.Final\hibernate-release-5.2.2.Final\project\etc里的hibernate.properties属性文件里找到的,可以配置所有的数据库
      • mapping:是添加pojo的映射文件---后面再说
    6. hibernate的配置文件完成
  • 让spring支持hibernate框架

    1. 在spring配置文件中支持hibernate
    2. 配置
    3. <?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.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/aop 
              http://www.springframework.org/schema/aop/spring-aop.xsd
              http://www.springframework.org/schema/tx
              http://www.springframework.org/schema/tx/spring-tx.xsd
              http://www.springframework.org/schema/mvc
              http://www.springframework.org/schema/mvc/spring-mvc.xsd"
      	default-autowire="byName">
      	<!-- 扫描那些包 -->
      
      	<context:component-scan base-package="com.bjsxt" />
      
      	<!-- 支持hibernate -->
      	<bean id="sessionFactory"
      		class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
      		<!-- 引入hibernate的配置文件 -->
      		<property name="configLocations" value="classpath:hibernate.cfg.xml" />
      	</bean>
      
      </beans>
    4. 解释:要让spring支持hibernate只需要在spring配置文件中配置一个sessionFactory的类即可
    5. 属性配置:property:中name=configLoaction是从这个localSessionFactory类里的属性,配置上hibernate的核心配置文件即可

  • 实现简单的查询操作(涉及到一个ocp原则(开放封闭原则))

    1. 创建表结构
    2. id	int	11	0	0	-1	0	0	0		0	角色id				-1	0
      name	varchar	255	0	0	0	0	0	0		0	角色名称	utf8	utf8_general_ci		0	
      email	varchar	255	0	0	0	0	0	0		0	email	utf8	utf8_general_ci		0	0
      status	tinyint	4	0	0	0	0	0	0		0	角色状态				0	0
      updateTime	datetime	0	0	0	0	0	0	0		0	更新时间					
      reateTime	datetime	0	0	0	0	0	0	0		0	创建时间					
      lastLoginTime	datetime	0	0	0	0	0	0	0		0	上次登录时间					
      
    3. 创建pojo
    4. public class AUser
      {
      	private int id;
      	private String name;
      	private String email;
      	private byte status;
      	private Date updateTime;
      	private Date createTime;
      	private Date lastLoginTime;}get/set 略
      
    5. 创建映射文件
    6. <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE hibernate-mapping PUBLIC 
      	"-//Hibernate/Hibernate Mapping DTD//EN"
       	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
       <hibernate-mapping>
       	<!-- 匹配的类 -->
       	<class name="com.bjsxt.user.pojo.AUser" table="a_user">
       		<!-- 主键 -->
       		<id name="id">
       			<!-- 主键生成策略 -->
       			<generator class="native"/>
       		</id>
       		<!-- 其他属性 -->
       		<property name="email"/>
       		<property name="name"/>
       		<property name="status"/>
       		<property name="createTime"/>
       		<property name="updateTime"/>
       		<property name="lastLoginTime"/>
       		
       	</class>
       </hibernate-mapping>
      解释:在和pojo相同的路径下创建一个xml,文件名一般为:类名.hbm.xml,DTD从这里看吧 忘记了,hibernate-mapping为根节点,class,表示对应的类,table表示对应的表,id表示主键,generator,表示主键生成策略,其他属性,(要在hiberntae配置文件中将映射的配置文件引入)
    7. 创建所有的dao的父类,以及实现类---->实现ocp原则
    8. package com.bjsxt.commom.dao;
      
      import java.util.Map;
      
      public interface IBasicDao<T>
      {
          /**
           * 保存一个对象
           * @param t
           * @return 返回的为主键,若等于0 为失败
           */
          int insert(T t);
          /**
           * 查询一条记录
           * @param condMap
           * @return
           */
          T findOne(String hql,Map<String,Object> condMap);
      }
      
      实现类:
    9. package com.bjsxt.commom.dao.impl;
      
      import java.util.Map;
      
      import org.hibernate.HibernateException;
      import org.hibernate.Session;
      import org.hibernate.query.Query;
      import org.springframework.orm.hibernate5.HibernateCallback;
      import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
      
      import com.bjsxt.commom.dao.IBasicDao;
      
      public abstract class BasicDaoImpl<T> extends HibernateDaoSupport implements IBasicDao<T>
      {
      	/*
      	 * 保存一个对象
      	 * */
      	@Override
      	public int insert(T t)
      	{
      		return (int) this.getHibernateTemplate().save(t);
      	}
      	
      	/*
      	 * 抽象方法要求继承的子类重写,为自己的findone写条件
      	 * */
      	public abstract T findOne(String type,Map<String,Object> sourceMap);
      	/**
      	 * 查询一条记录
      	 */
      	protected T findOneDao(String hql,Map<String, Object> condMap)
      	{
      		return this.getHibernateTemplate().execute(new HibernateCallback<T>()
      		{
      			
      			@Override
      			public T doInHibernate(Session session) throws HibernateException
      			{
      				/* 
      				 * session = connection  一个链接
      				 * 
      				 * 获得一个query对象 == preparedStatement 
      				 * */
      				try
      				{
      					Query<T> query = session.createQuery(hql);
      					/* 设置参数 */
      					query.setProperties(condMap);
      					return query.getSingleResult();
      				} catch (Exception e)
      				{
      					return null;
      				}
      			}
      		});
      	}
      	
      }
      
      dao:
    10. package com.bjsxt.user.dao.impl;
      
      import java.util.HashMap;
      import java.util.Map;
      
      import org.springframework.stereotype.Repository;
      
      import com.bjsxt.commom.dao.impl.BasicDaoImpl;
      import com.bjsxt.user.dao.IAUserDao;
      import com.bjsxt.user.pojo.AUser;
      
      @Repository("userDao")
      public class AUserDaoImpl extends BasicDaoImpl<AUser>  implements IAUserDao 
      {
      	/**
      	 * 为父类的方法拼接条件
      	 */
      	@Override
      	public AUser findOne(String type, Map<String, Object> sourceMap)
      	{
      		Map<String,Object> condMap  = new HashMap<String,Object>();
      		StringBuffer hqlsb = new StringBuffer();
      		hqlsb.append(" from AUser au where 1 = 1 ");
      		if(!"".equalsIgnoreCase(sourceMap.get("id")+"") && sourceMap.get("id")!= null)
      		{
      			hqlsb.append(" and id = :id  ");
      			condMap.put("id", Integer.valueOf(sourceMap.get("id")+""));
      		}else if(!"".equalsIgnoreCase(sourceMap.get("password")+"") && sourceMap.get("password")!= null 
      				&& "".equalsIgnoreCase(sourceMap.get("email")+"") && sourceMap.get("email")!= null)
      		{
      			hqlsb.append(" and email = :email and password = :password ");
      			condMap.put("email", sourceMap.get("email"));
      			condMap.put("password", sourceMap.get("password"));
      		}else
      		{
      			return null;
      		}
      		hqlsb.append(" order by au.createTime desc");
      		return this.findOneDao(hqlsb.toString(), condMap);
      	}
      	
      }
      
      service:
    11. package com.bjsxt.user.service.impl;
      
      import java.util.Map;
      
      import javax.annotation.Resource;
      
      import org.springframework.stereotype.Service;
      
      import com.alibaba.fastjson.JSONObject;
      import com.bjsxt.user.dao.IAUserDao;
      import com.bjsxt.user.pojo.AUser;
      import com.bjsxt.user.service.IUserService;
      @Service("userService")
      public class UserServiceImpl implements IUserService
      {
      	@Resource
      	private IAUserDao userDao;
      	
      	@Override
      	public AUser findUserService(String type, Map<String, Object> sourceMap)
      	{
      		return this.userDao.findOne(type, sourceMap);
      	}
      	/**
      	 * @return code:1 表示成功 0 表示失败
      	 * 
      	 */
      	@Override
      	public JSONObject insertUserService(AUser user)
      	{
      		JSONObject jsonObject = new JSONObject();
      		int insert = this.userDao.insert(user);
      		if(insert>0)
      		{
      			jsonObject.put("code", "1");
      			jsonObject.put("info", "用户添加成功");
      		}else
      		{
      			jsonObject.put("code", "0");
      			jsonObject.put("info", "用户添加成功");
      		}
      		return jsonObject;
      	}
      
      }
      
    12. 所有接口略:
  • junit测试

    • 父类:
    • package com.bjsxt.commom.test;
      
      import org.junit.Before;
      import org.junit.Test;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      import com.bjsxt.commom.Util.constantFinalUtil;
      
      public class BasicTest
      {
      	protected ApplicationContext applicationContext;
      	
      	@Before
      	public void infoSpring()
      	{
      		applicationContext = new  ClassPathXmlApplicationContext("classpath:spring/applicationContext_*.xml");
      	}
      	
      	@Test
      	public void testSucceed() 
      	{
      		constantFinalUtil.LOGGER.info("----applicationContext==={}------------",applicationContext);
      	}
      }

      测试类:
    • package com.bjsxt.user;
      
      import java.util.HashMap;
      import java.util.Map;
      
      import org.junit.Before;
      import org.junit.Test;
      
      import com.bjsxt.commom.Util.constantFinalUtil;
      import com.bjsxt.commom.test.BasicTest;
      import com.bjsxt.user.pojo.AUser;
      import com.bjsxt.user.service.IUserService;
      
      public class TestUserService extends BasicTest
      {
      	private IUserService userService;
      	
      	@Before
      	public void info()
      	{
      		userService = (IUserService) this.applicationContext.getBean("userService");
      	}
      	
      	@Test
      	public void test()
      	{
      		constantFinalUtil.LOGGER.info("--test--{}",userService);
      	}
      	@Test
      	public void findUserService()
      	{
      		Map<String, Object> sourceMap = new HashMap<String,Object>();;
      		sourceMap.put("id", 1);
      		
      		AUser user = this.userService.findUserService("", sourceMap );
      		constantFinalUtil.LOGGER.info("--user--{}",user);
      	}
      }
      

      结果:
    • - --user--AUser [id=1, name=1, email=1, status=1, updateTime=2016-12-13 11:04:12.0, createTime=2016-12-21 11:04:14.0, lastLoginTime=2016-12-06 11:04:16.0]

      只写了一个最简单的查询单条的记录,如果是其他操作需要用到事物管理器,后续补

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值