延续maven+springMVC+hibernate项目搭建基本内容,只给出base层泛型实现类代码,由于对hql不熟,这里用mysql实现。
1.BaseDaoImpl.java:通过搭建三中sessionFactory实现数据表增删改查,添加List<Map>返回数据格式函数。
package com.cms.base.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.CriteriaSpecification;
import com.cms.base.BaseDao;
public class BaseDaoImpl<T,ID extends Serializable> implements BaseDao<T,ID> {
@Resource(name="sessionFactory")
private SessionFactory sessionFactory;
private Class<T> entityClass;
@SuppressWarnings("unchecked")
public BaseDaoImpl() {
Type type = getClass().getGenericSuperclass();
Type[] parameterizedType = ((ParameterizedType) type).getActualTypeArguments();
entityClass = ((Class<T>) parameterizedType[0]);
}
@SuppressWarnings("unchecked")
public T find(ID id) {
return (T)this.sessionFactory.getCurrentSession().get(entityClass, id);
}
@SuppressWarnings("unchecked")
public List<T> findAll() {
String sql = "select * from "+entityClass.getSimpleName();
return this.sessionFactory.getCurrentSession().createSQLQuery(sql).setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP).list();
}
public void save(T entity){
this.sessionFactory.getCurrentSession().saveOrUpdate(entity);
}
public void delete(T entity) {
this.sessionFactory.getCurrentSession().delete(entity);
}
public Long findCount() {
String sql = "select count(*) num from "+entityClass.getSimpleName();
Long num = Long.valueOf(this.sessionFactory.getCurrentSession().createSQLQuery(sql).uniqueResult().toString());
return num;
}
@SuppressWarnings("unchecked")
public List<T> findSqlList(String paraSql) {
return this.sessionFactory.getCurrentSession().createSQLQuery(paraSql).setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP).list();
}
@SuppressWarnings("unchecked")
public List<Map<String,Object>> findSqlListMap(String paraSql) {
return this.sessionFactory.getCurrentSession().createSQLQuery(paraSql).setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP).list();
}
public void remove(ID... ids) {
String sql = "delete from "+this.entityClass.getSimpleName()+" where id in(";
for(ID id:ids){
sql += id+",";
}
sql = sql.substring(0, sql.length()-1)+")";
this.sessionFactory.getCurrentSession().createSQLQuery(sql).executeUpdate();
}
}
2.BaseServiceImpl.java:简单的调用baseDao基本功能
package com.cms.base.impl;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.cms.base.BaseDao;
import com.cms.base.BaseService;
@Service("baseService")
@Transactional
public class BaseServiceImpl<T, ID extends Serializable> implements BaseService<T, ID>{
@Resource
private BaseDao<T,ID> baseDao;
/**
* The Entity class
*/
private Class<T> entityClass;
public Class<T> getEntityClass() {
return entityClass;
}
public T find(ID id) {
return this.baseDao.find(id);
}
public List<T> findAll() {
return this.baseDao.findAll();
}
public List<T> findList(ID... ids) {
// TODO Auto-generated method stub
return null;
}
public void save(T entity) {
this.baseDao.save(entity);
}
public void delete(ID... ids) {
this.baseDao.remove(ids);
}
public void delete(T entity) {
this.baseDao.delete(entity);
}
public Long findCount(){
return this.baseDao.findCount();
}
}
3.BaseCron.java:只是实现一些辅助功能(转json与前端通信方便),具体服务有对应service提供
package com.cms.base.impl;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
@Component
public class BaseCron {
public String outJson(Object o){
return JSON.toJSONString(o);
}
}
4.测试controller
package com.cms.user.controller;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cms.base.impl.BaseCron;
import com.cms.user.entity.User;
import com.cms.user.service.UserService;
@Controller
@ResponseBody
@RequestMapping("/auth")
public class UserController extends BaseCron{
@Resource(name = "userService")
private UserService userService;
@RequestMapping("/find")
public Object find(User u){
String jsonStr = JSON.toJSONString(this.userService.findAll());
try {
// this.userService.saveA(u);
// this.userService.delete(u);
// String lm = this.outJson(this.userService.findUserByName(u.getUserName()));
// System.out.println(lm);
// String lt = this.outJson(this.userService.findUserBySex(u.getSex()));
// System.out.println(lt);
// System.out.println(this.userService.findCount());
// String[]a = {"1"};
// this.userService.delete(a);
JSONObject r = new JSONObject();
r.put("r", this.userService.findAll());
return r.toJSONString();
} catch (Exception e) {
e.printStackTrace();
}
return jsonStr;
}
}
5.controller注释掉部分对应service和dao的实现如下
package com.cms.user.service.impl;
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.cms.base.impl.BaseServiceImpl;
import com.cms.user.dao.UserDao;
import com.cms.user.entity.User;
import com.cms.user.service.UserService;
@Service("userService")
@Transactional
public class UserServiceImpl extends BaseServiceImpl<User, String> implements UserService{
@Resource(name="userDao")
private UserDao userDao;
public void saveA(User user)throws Exception {
this.userDao.saveA(user);
}
public List<Map<String,Object>> findUserByName(String name) throws Exception{
return this.userDao.findUserByName(name);
}
public List<User> findUserBySex(String sex) throws Exception{
return this.userDao.findUserBySex(sex);
}
}
package com.cms.user.dao.impl;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import com.cms.base.impl.BaseDaoImpl;
import com.cms.user.dao.UserDao;
import com.cms.user.entity.User;
@Repository("userDao")
public class UserDaoImpl extends BaseDaoImpl<User, String> implements UserDao{
@Resource(name="sessionFactory")
private SessionFactory sessionFactory;
public void saveA(User user){
this.sessionFactory.getCurrentSession().saveOrUpdate(user);
}
public List<Map<String,Object>> findUserByName(String name){
String sql="select * from user where username like '%"+name+"%'";
return this.findSqlListMap(sql);
}
public List<User> findUserBySex(String sex){
String sql="select * from user where sex ='"+sex+"'";
return this.findSqlList(sql);
}
}
6.创建如图红圈内容,进行测试,搜索下载jquery-3.1.1.min.js文件,其它文件代码后面给出
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
</head>
<body>
<h2>Hello World!</h2>
<a href="/cms/app/User.html">查看User信息</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="js/jquery-3.1.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/user.js" ></script>
<title>Insert title here</title>
</head>
<body>
<table id="userTable" border="1" cellspacing="1" cellpadding="1">
</table>
</body>
</html>
(3)user.js
$(document).ready(function(){
$.ajax({
type:"post",
dataType:"json",
url:"/cms/auth/find",
async:true,
data:"userName=a",
success:function(data){
userInfo(data.r);
}
});
})
function userInfo(userList){
var rHtml="<tr><th>id</th><th>name</th><th>sex</th><th>age</th></tr>";
for(var i=0; i<userList.length;i++){
rHtml += "<tr>";
rHtml += "<td>"+userList[i].id+"</td>";
rHtml += "<td>"+userList[i].username+"</td>";
rHtml += "<td>"+userList[i].sex+"</td>";
rHtml += "<td>"+userList[i].age+"</td>";
rHtml += "<tr>";
}
$("#userTable").html(rHtml);
}
7.测试结果
(1)浏览器输入http://localhost:8080/cms/index.jsp,看到helloword和一个连接
(2)点击连接,看到生成的信息
8.总结
从eclipse,tomcat,maven等的配置,到springmvc+hibernate整合配置,再到基本base层代码,现在已经可以简单实现一些web开发的基本功能。
在不考虑并发、效率等问题时,还需要熟悉一些前端h5,css,js技术,就能完成简单一个简单功能的类似cms的管理系统。能力刚到此,仍需努力啊。