技术支持:springboot,mysql,hibernate,entityManage
结构图:
功能计划:查询出User数据信息
————————————************分隔符**********———————
1:配置pom.xml
<!--mysql支持 MySQL的JDBC驱动包,用JDBC连接MySQL数据库时必须使用该jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--事务管理:原子性,一致性,隔离性,持久性 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--jpa 集成hibernate -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2:配置application.properties
#---------------------jspSupport---------------------
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.mvc.date-format="yyyy-MM-dd HH:mm:ss"
#-----------------dataSource------------
spring.datasource.url=jdbc:mysql://localhost:3306/db_dz_rhcms
spring.datasource.username = root
spring.datasource.password = zhao4443
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
#-----------------JPA-hibernate--------------
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
3:配置UserDto
4:hibernate封装查询方法
4.1
public interface BaseAppDao<T,ID extends Serializable> {
/**
* 保存数据对象
* @param entity
* @return
*/
boolean insert(T entity);
/**
* 根据id查询
* @param id
* @param t
* @return
*/
T findById(T t,Long id);
/**
* 根据表名,字段,参数查询,拼接sql语句
* @param tablename 表名
* @param filed 字段名
* @param o 字段参数
* @return
*/
List<T> findByHql(String tableName,String filed,Object o);
Object findObjiectByHql(String tablename,String filed,Object o);
/**
* 多个字段的查询
* @param tablename 表名
* @param map 将你的字段传入map中
* @return
*/
List<T> findByMoreFiled(String tablename,LinkedHashMap<String,Object> map);
/**
* 多字段查询分页
* @param tablename 表名
* @param map 以map存储key,value
* @param start 第几页
* @param pageNumer 一个页面的条数
* @return
*/
List<T> findByMoreFiledPage(String tableName,LinkedHashMap<String, Object> map,int star,int pageNumer);
/**
* 一个字段的分页
* @param tablename 表名
* @param filed 字段名
* @param o 字段参数
* @param start 第几页
* @param pageNumer 一个页面多少条数据
* @return
*/
List<T> findPages(String tableName,String filed,Object o,int start,int pageNumer);
/**
* 根据表的id删除数据
* @param entity
*/
boolean delete(T entity);
/**
* 更新对象
* @param e
* @return
*/
boolean update(T entity);
/**
* 根据传入的map遍历key,value拼接字符串,以id为条件更新
* @param tablename 表名
* @param map 传入参数放入map中
* @return
*/
Integer updateMoreFiled(String tableName,LinkedHashMap<String, Object> map,Long id);
/**
* 根据条件查询总条数返回object类型
* @param tablename 表名
* @param map 传入参数放入map中
* @return
*/
Object findCount(String tableName,LinkedHashMap<String, Object> map);
}
4.2
@Repository
public class SimpleService<T,ID extends Serializable> implements BaseAppDao<T, ID>{
private static Logger log=Logger.getLogger(SimpleService.class);
@PersistenceContext
private EntityManager entityManager;
/**
* 插入数据
*/
@Transactional
@Override
public boolean insert(T entity) {
boolean flag=false;
try {
entityManager.persist(entity);
flag=true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 根据id查找数据
*/
@Transactional
@Override
public Object findById(Object obj, Long id) {
return entityManager.find(obj.getClass(), id);
}
/**
* 根据表名,字段,参数查询,拼接sql语句
*/
@Transactional
@Override
public List<T> findByHql(String tableName, String filed, Object o) {
String sql="from "+tableName+" where "+filed+" =?";
log.warn(sql);
Query query=entityManager.createQuery(sql);
query.setParameter(1, o);
List<T> result=query.getResultList();
entityManager.close();
return result;
}
@Transactional
@Override
public Object findObjiectByHql(String tablename, String filed, Object o) {
Query query=entityManager.createQuery("from "+tablename+" where "+filed+" =?");
query.setParameter(1, o);
entityManager.close();
return query.getSingleResult();
}
/**
* 多个字段的查询
* @param tablename 表名
* @param map 将你的字段传入map中
* key:字段 ,value:值
* @return
*/
@Transactional
@Override
public List<T> findByMoreFiled(String tablename, LinkedHashMap<String, Object> map) {
List<Object> filedlist=new ArrayList<>();
StringBuffer sql=new StringBuffer();
sql.append("from "+tablename+" u where ");
Iterator<String> iter= map.keySet().iterator();
while(iter.hasNext()) {
sql.append(" u."+iter.next()+"=? and ");
filedlist.add(map.get(iter.next()));
}
Query query=entityManager.createQuery(sql.toString().substring(0,sql.toString().length()-4));
for(int i=0;i<filedlist.size();i++) {
query.setParameter(i+1, filedlist.get(i));
}
List<T> result=query.getResultList();
entityManager.close();
return result;
}
/**
* 多字段查询分页
* @param tablename 表名
* @param map 以map存储key,value
* @param start 第几页
* @param pageNumer 一个页面的条数
* @return
*/
@Transactional
@Override
public List<T> findByMoreFiledPage(String tableName, LinkedHashMap<String, Object> map, int star, int pageNumer) {
List<Object> filedlist=new ArrayList<>();
StringBuffer sql=new StringBuffer();
sql.append("from "+tableName+" u where ");
Iterator<String> iter= map.keySet().iterator();
while(iter.hasNext()) {
sql.append(" u."+iter.next()+"=? and ");
filedlist.add(map.get(iter.next()));
}
Query query=entityManager.createQuery(sql.toString().substring(0,sql.toString().length()-4));
for(int i=0;i<filedlist.size();i++) {
query.setParameter(i+1, filedlist.get(i));
}
query.setFirstResult((star-1)*pageNumer);
query.setMaxResults(pageNumer);
List<T> result=query.getResultList();
entityManager.close();
return result;
}
/**
* 一个字段的分页
* @param tablename 表名
* @param filed 字段名
* @param o 字段参数
* @param start 第几页
* @param pageNumer 一个页面多少条数据
* @return
*/
@Transactional
@Override
public List<T> findPages(String tableName, String filed, Object o, int start, int pageNumer) {
try {
Query query=entityManager.createQuery(" from "+tableName+" t where t."+filed+"=?");
query.setParameter(1, o);
query.setFirstResult((start-1)*pageNumer);
query.setMaxResults(pageNumer);
List<T> result=query.getResultList();
entityManager.close();
return result;
} catch (Exception e) {
log.warn(e.getMessage());
return null;
}
}
/**
* 根据表的id删除数据
* @param entity
*/
@Transactional
@Override
public boolean delete(T entity) {
boolean flag=false;
try {
entityManager.remove(entityManager.merge(entity));
flag=true;
return flag;
} catch (Exception e) {
log.warn(e.getMessage());
return flag;
}
}
/**
* 更新对象
* @param e
* @return
*/
@Transactional
@Override
public boolean update(T entity) {
boolean flag=false;
try {
entityManager.merge(entity);
flag=true;
return flag;
} catch (Exception e) {
log.warn(e.getMessage());
return flag;
}
}
/**
* 根据传入的map遍历key,value拼接字符串,以id为条件更新
* @param tablename 表名
* @param map 传入参数放入map中
* @return
*/
@Transactional
@Override
public Integer updateMoreFiled(String tableName, LinkedHashMap<String, Object> map,Long id) {
StringBuffer sql=new StringBuffer();
sql.append("update "+tableName+" t set ");
Iterator<String> iter=map.keySet().iterator();
while(iter.hasNext()) {
if(map.get(iter.next()).getClass().getTypeName()=="java.lang.String") {
sql.append("t."+iter.next()+"='"+map.get(iter.next())+"', " );
}else {
sql.append("t."+iter.next()+"="+map.get(iter.next())+", " );
}
}
String exesql=sql.toString().substring(0,sql.toString().length()-2);
exesql+="t.id="+id;
try {
Query query=entityManager.createQuery(exesql);
query.setParameter(1, id);
int result=query.executeUpdate();
return result;
} catch (Exception e) {
log.warn(e.getMessage());
return 0;
}
}
/**
* 根据条件查询总条数返回object类型
* @param tablename 表名
* @param map 传入参数放入map中
* @return
*/
@Transactional
@Override
public Object findCount(String tableName, LinkedHashMap<String, Object> map) {
String sql="select count(u) from "+tableName+" u WHERE ";
Set<String> set=null;
set=map.keySet();
List<String> list=new ArrayList<>(set);
List<Object> filedlist=new ArrayList<>();
for (String filed:list){
sql+="u."+filed+"=? and ";
filedlist.add(filed);
}
sql=sql.substring(0,sql.length()-4);
System.out.println(sql+"--------sql语句-------------");
Query query=entityManager.createQuery(sql);
for (int i=0;i<filedlist.size();i++){
query.setParameter(i+1,map.get(filedlist.get(i)));
}
return query.getSingleResult();
}
}
5:登录验证
/**
* @author 赵参谋
*
*/
@Controller
public class Login {
@SuppressWarnings("rawtypes")
@Resource
private SimpleService simpleService;
private User user=new User();
/**
* 跳转登陆页面
* @author 赵参谋
*/
@RequestMapping(value="/demo")
public String userLogin() {
return "index";
}
/**
* 登陆验证
* @author 赵参谋
*/
@RequestMapping(value="/sysLogin.do")
public String sysLogin(@NotBlank String name,@NotBlank String password) {
User obj= (User)simpleService.findById(user, Long.parseLong("1"));
return null;
}
}
参考文献:entityManage: https://docs.oracle.com/javaee/5/api/javax/persistence/EntityManager.html