请教:Spring + Hibernate 无法将数据写入数据库?

Spring + Hibernate 无法将数据写入数据

请教: 通过Junit单元测试Service可以将数据写入数据库;但部署访问却无法向数据库写入数据。

1 环境:
Spring 3.1.2
Hibernate 4.1.4
Jdk1.6
2 配置:
2.1 Web.xml
<!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后面的Spring Context Loader -->

contextConfigLocation
classpath*:/applicationContext.xml

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!--Dispathcer Servlet -->
<servlet>
    <servlet-name>spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<!-- Spring MVC Servlet 拦截.do结尾的请求-->
<servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<!-- Filter 定义 -->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!--openSessionInView-->

openSessionInView
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter

sessionFactoryBeanName
sessionFactory

<filter-mapping>
    <filter-name>openSessionInView</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

2.2 applicationContext.xml
<!--扫描并自动装配 -->



classpath:application.properties

<!-- 数据源配置 -->

<!-- Connection Info -->



    <!-- Connection Pooling Info -->
    <property name="maxActive" value="${dbcp.maxActive}" />
    <property name="maxIdle" value="${dbcp.maxIdle}" />
    <property name="defaultAutoCommit" value="false" />

    <!-- 连接Idle一个小时后超时 -->
    <property name="timeBetweenEvictionRunsMillis" value="3600000" />
    <property name="minEvictableIdleTimeMillis" value="3600000" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>        
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.connection.autocommit">true</prop>
            <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
        </props>
    </property>

    <property name="packagesToScan">
        <list>
            <value>com.sp.dao</value>
            <value>com.sp.entity.dict</value>
        </list>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" abstract="false" lazy-init="default" autowire="default">
    <property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>

<!-- 事务管理配置 -->
<!--<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>--> 
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="insert*" read-only="false" propagation="REQUIRED" />
        <tx:method name="get*" read-only="false" propagation="REQUIRED" />
        <tx:method name="add*" read-only="false" propagation="REQUIRED" />
        <tx:method name="update*" read-only="false" propagation="REQUIRED" />
        <tx:method name="delete*" read-only="false" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:advisor pointcut="execution(* com.sp.service.*.*(..))"  advice-ref="txAdvice"/>
</aop:config>

2.3 spring-mvc.xml

<!-- 启动注解驱动的SpringMVC功能,注册请求URL和注解POJO类方法的映射 -->
<mvc:annotation-driven />

<!-- 自动扫描且只扫描@Controller -->
<context:component-scan base-package="com.sp.web" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

<context:component-scan base-package="com.sp.dao.impl"></context:component-scan>
<context:component-scan base-package="com.sp.service.impl"></context:component-scan>

<mvc:default-servlet-handler />

<!-- 对模型视图名称的解析,在请求时模型视图名称添加后缀。定义JSP -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

<!-- 支持上传文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

2.4 hibernate.cfg.xml
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/test
root
password

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect 
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
-->
<!-- Enable Hibernate's automatic session context management -->
<!-- <property name="current_session_context_class">thread</property> -->

<!-- Disable the second-level cache  -->
<!-- <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>-->

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>

<!-- Drop and re-create the database schema on startup-->
<property name="hbm2ddl.auto">update</property>
<property name="javax.persistence.validation.mode">none</property>

3 代码:
3.1 Service层:
@Component("userService")
public class UserServiceImpl implements UserService{

@Autowired
private UserDao userDao;

@Autowired
private FormValidator validator;

@Override
public String userLogin(UserModel user) {
    String password = userDao.userLogin(user);
    if(password.equals(user.getPassword())){
        return "sucess";
    }else{
        return "false";
    }
}

@Override
public List<ProjectType> getAllProjectTypes(){
    List<ProjectType> projectType = userDao.getAllProjectTypes();
    return projectType;
}


@Override
public String addProjectType(@ModelAttribute("newProjectType")ProjectType projectType,BindingResult result,SessionStatus status){
    validator.validate(projectType, result);
    if(result.hasErrors()){
        return "newProjectType";
    }
    userDao.save(projectType);
    //status.setComplete();
    return "redirect:showProjectTypes.do";
}

//添加《项目类型》
@Override
public String addProjectType(ProjectType projectType) {
    userDao.save(projectType);
    return "redirect:showProjectTypes.do";
}

}
3.2 Control层
@Controller
@RequestMapping(value = "/user")
public class UserController {

@Autowired
private UserService userService;

@Autowired
private FormValidator validator;

@RequestMapping(value = "/login",method=RequestMethod.POST)
protected String handle(UserModel user,BindingResult result, Model model){
    String flag = userService.userLogin(user);
    System.out.println("flag:" + flag);
    if ("sucess".equals(flag)){
        return "sucess";
    }
    return "test1";
}

@RequestMapping(value = "/showProjectTypes")
protected ModelAndView getAllProjectTypes(){
    ModelAndView mav = new ModelAndView("showProjectTypes");
    List<ProjectType> projectTypes = userService.getAllProjectTypes();
    mav.addObject("SEARCH_PROJECTTYPE_RESULTS_KEY", projectTypes);
    return mav;
}

@RequestMapping(value = "/addProjectType",method=RequestMethod.GET)
protected ModelAndView newProjectTypeForm(){
    ModelAndView mav = new ModelAndView("newProjectType");
    ProjectType projectType = new ProjectType();
    mav.getModelMap().put("newProjectType", projectType);
    return mav;
}

@RequestMapping(value = "/saveProjectType",method=RequestMethod.POST)
protected String addProjectType(@ModelAttribute("newProjectType")ProjectType projectType,BindingResult result,SessionStatus status){
    //return userService.addProjectType(projectType, result, status);
    return userService.addProjectType(projectType);
}

}

3.3 DAO层

@Component("userDao")
public class UserDaoImpl implements UserDao{
@Autowired
private SessionFactory sessionFactory;

public ProjectType getById(int id)
{
    return (ProjectType) sessionFactory.getCurrentSession().get(ProjectType.class, id);
}

@Override
public String userLogin(UserModel user) {
    return "123456";
}

//获取数据
@Override
@SuppressWarnings("unchecked")
public List<ProjectType> getAllProjectTypes() {
    Criteria ceriteria = sessionFactory.getCurrentSession().createCriteria(ProjectType.class);
    return ceriteria.list();
}

//新增数据;
@Override

// @Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public int save(ProjectType projectType) {
System.out.println("save:---");
System.out.println(projectType.getIndex());
System.out.println(projectType.getProjectType());
System.out.println(projectType.getProjectTypeAbbr());

    return (Integer) sessionFactory.getCurrentSession().save(projectType);
}

}

1个回答

spring框架中多数据源创建加载并且实现动态切换的配置实例代码 http://www.zuidaima.com/share/1774074130205696.htm

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请教:Spring + Hibernate 无法将数据写入数据库?

Spring + Hibernate 无法将数据写入数据 **请教: 通过Junit单元测试Service可以将数据写入数据库;但部署访问却无法向数据库写入数据。** 1 环境: Spring 3.1.2 Hibernate 4.1.4 Jdk1.6 2 配置: 2.1 Web.xml <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后面的Spring Context Loader --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--Dispathcer Servlet --> <servlet> <servlet-name>spring-mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- Spring MVC Servlet 拦截.do结尾的请求--> <servlet-mapping> <servlet-name>spring-mvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- Filter 定义 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--openSessionInView--> <filter> <filter-name>openSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>sessionFactoryBeanName</param-name> <param-value>sessionFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>openSessionInView</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 2.2 applicationContext.xml <!--扫描并自动装配 --> <context:annotation-config /> <context:component-scan base-package="com.sp" /> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:application.properties</value> </property> </bean> <!-- 数据源配置 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- Connection Pooling Info --> <property name="maxActive" value="${dbcp.maxActive}" /> <property name="maxIdle" value="${dbcp.maxIdle}" /> <property name="defaultAutoCommit" value="false" /> <!-- 连接Idle一个小时后超时 --> <property name="timeBetweenEvictionRunsMillis" value="3600000" /> <property name="minEvictableIdleTimeMillis" value="3600000" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.connection.autocommit">true</prop> <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <property name="packagesToScan"> <list> <value>com.sp.dao</value> <value>com.sp.entity.dict</value> </list> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" abstract="false" lazy-init="default" autowire="default"> <property name="sessionFactory"><ref bean="sessionFactory" /></property> </bean> <!-- 事务管理配置 --> <!--<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" read-only="false" propagation="REQUIRED" /> <tx:method name="get*" read-only="false" propagation="REQUIRED" /> <tx:method name="add*" read-only="false" propagation="REQUIRED" /> <tx:method name="update*" read-only="false" propagation="REQUIRED" /> <tx:method name="delete*" read-only="false" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <aop:advisor pointcut="execution(* com.sp.service.*.*(..))" advice-ref="txAdvice"/> </aop:config> </beans> 2.3 spring-mvc.xml <!-- 启动注解驱动的SpringMVC功能,注册请求URL和注解POJO类方法的映射 --> <mvc:annotation-driven /> <!-- 自动扫描且只扫描@Controller --> <context:component-scan base-package="com.sp.web" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <context:component-scan base-package="com.sp.dao.impl"></context:component-scan> <context:component-scan base-package="com.sp.service.impl"></context:component-scan> <mvc:default-servlet-handler /> <!-- 对模型视图名称的解析,在请求时模型视图名称添加后缀。定义JSP --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 支持上传文件 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> 2.4 hibernate.cfg.xml <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password">password</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect <property name="dialect">org.hibernate.dialect.MySQLDialect</property> --> <!-- Enable Hibernate's automatic session context management --> <!-- <property name="current_session_context_class">thread</property> --> <!-- Disable the second-level cache --> <!-- <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>--> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup--> <property name="hbm2ddl.auto">update</property> <property name="javax.persistence.validation.mode">none</property> 3 代码: 3.1 Service层: @Component("userService") public class UserServiceImpl implements UserService{ @Autowired private UserDao userDao; @Autowired private FormValidator validator; @Override public String userLogin(UserModel user) { String password = userDao.userLogin(user); if(password.equals(user.getPassword())){ return "sucess"; }else{ return "false"; } } @Override public List<ProjectType> getAllProjectTypes(){ List<ProjectType> projectType = userDao.getAllProjectTypes(); return projectType; } @Override public String addProjectType(@ModelAttribute("newProjectType")ProjectType projectType,BindingResult result,SessionStatus status){ validator.validate(projectType, result); if(result.hasErrors()){ return "newProjectType"; } userDao.save(projectType); //status.setComplete(); return "redirect:showProjectTypes.do"; } //添加《项目类型》 @Override public String addProjectType(ProjectType projectType) { userDao.save(projectType); return "redirect:showProjectTypes.do"; } } 3.2 Control层 @Controller @RequestMapping(value = "/user") public class UserController { @Autowired private UserService userService; @Autowired private FormValidator validator; @RequestMapping(value = "/login",method=RequestMethod.POST) protected String handle(UserModel user,BindingResult result, Model model){ String flag = userService.userLogin(user); System.out.println("flag:" + flag); if ("sucess".equals(flag)){ return "sucess"; } return "test1"; } @RequestMapping(value = "/showProjectTypes") protected ModelAndView getAllProjectTypes(){ ModelAndView mav = new ModelAndView("showProjectTypes"); List<ProjectType> projectTypes = userService.getAllProjectTypes(); mav.addObject("SEARCH_PROJECTTYPE_RESULTS_KEY", projectTypes); return mav; } @RequestMapping(value = "/addProjectType",method=RequestMethod.GET) protected ModelAndView newProjectTypeForm(){ ModelAndView mav = new ModelAndView("newProjectType"); ProjectType projectType = new ProjectType(); mav.getModelMap().put("newProjectType", projectType); return mav; } @RequestMapping(value = "/saveProjectType",method=RequestMethod.POST) protected String addProjectType(@ModelAttribute("newProjectType")ProjectType projectType,BindingResult result,SessionStatus status){ //return userService.addProjectType(projectType, result, status); return userService.addProjectType(projectType); } } 3.3 DAO层 @Component("userDao") public class UserDaoImpl implements UserDao{ @Autowired private SessionFactory sessionFactory; public ProjectType getById(int id) { return (ProjectType) sessionFactory.getCurrentSession().get(ProjectType.class, id); } @Override public String userLogin(UserModel user) { return "123456"; } //获取数据 @Override @SuppressWarnings("unchecked") public List<ProjectType> getAllProjectTypes() { Criteria ceriteria = sessionFactory.getCurrentSession().createCriteria(ProjectType.class); return ceriteria.list(); } //新增数据; @Override // @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public int save(ProjectType projectType) { System.out.println("save:---"); System.out.println(projectType.getIndex()); System.out.println(projectType.getProjectType()); System.out.println(projectType.getProjectTypeAbbr()); return (Integer) sessionFactory.getCurrentSession().save(projectType); } }

Spring+Hibernate如何配置多个数据库?

主要是配置文件上,希望能给两个数据库分别建立表所对应的实体,具体应该怎么操作,最好能给个demo,拜托大神回答。。

spring aop完成日志写入数据库

spring aop完成日志写入数据库 为什么在Controller层写上 自己的注解 却不能够将操作保存到数据库 也没有报任何错误,在自定义的注解中打断点 没有进去。 有可能哪方面出了问题呢??? 现在很是费解,请指点

spring +Hibernate配置连接数据库,

org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: rollback failed at org.springframework.orm.hibernate4.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:579) Caused by: org.hibernate.TransactionException: rollback failed at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:215) Caused by: org.hibernate.TransactionException: unable to rollback against JDBC connection at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:167) Caused by: java.sql.SQLRecoverableException: IO Error: Connection reset at oracle.jdbc.driver.T4CConnection.doRollback(T4CConnection.java:650) Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:196) Caused by: java.sql.SQLRecoverableException: IO Error: Connection timed out at oracle.jdbc.driver.T4CConnection.doRollback(T4CConnection.java:650) Caused by: java.net.SocketException: Connection timed out at java.net.SocketInputStream.socketRead0(Native Method) 是每次重启了Tomcat过段时间登录就会出现这个错误,重启后有段时间是正常的,在本地代码报错的是一个很简单的查询语句,在windows环境下能正常运行,在linux下隔断时间就会出现这个错误,用的容器是Tomcat

Hibernate更新、删除后数据库无变化

在使用Hibernate时,使用getHibernateTemplate()进行更新或删除操作时,数据库无变化,感觉应该是事务回滚问题,尝试了更改配置文件和dao层代码,但是仍然没有解决,希望得到大神指点一二,谢谢。 Dao层代码 ![图片说明](https://img-ask.csdn.net/upload/201904/11/1554949399_233315.jpg) Hibernate配置文件 ![图片说明](https://img-ask.csdn.net/upload/201904/11/1554949432_146549.jpg)

spring+hibernate配置多数据源动态切换,java实体如何和各个数据库实例映射?

我的一个javaweb项目,需要用到多个数据源,都是oracle实例,我用spring配置了数据源的动态切换。使用AOP在service层做拦截,然后用注解DataSource来标示所要选择的数据源。现在我有一个问题,就是我用数据库操作时,hibernate是面向对象的,我该如何将不同的java实体映射到不同的数据源上(不同数据库表结构不同)。比如一个product包中的java实体映射到数据库1,cart包中的实体映射到数据库2。如何做到呢?

实时大数据写入数据库

项目:IOCP的多线程(工作线程)解析大量客户端发送过来的数据;这个数据量是非常大的,上千个客户端,每50MS发送一个数据包过来,要把他们写入数据库。以下是我做的两种设计,均不能成功。 1.简单地通过程序一条一条地执行SQL语句写入数据库,失败,效率极低,淘汰。 2.我目前的处理是把这个SQL语句做一个拼接(...+SQL语句+;+SQL 语句+;+...),然后一并执行,写入数据库,但是这么设计的话,内存会一直涨,因为写入数据库的速率小于IOCP解析出来的数据所形成的SQL语句,它是占内存。 需解决的问题如下: 在不做分布式数据库设计的情况,有什么高性能的写数据库的方法, 我是用的数据库是SQL server 2008 ,用VC++ 实现,因为C#的话,微软封装了相应的类。求高手指教

springmvc spring hibernate 怎么配置连接两个数据库

persistent.xml配置 ``` <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <persistence-unit name="userPU" transaction-type="RESOURCE_LOCAL"> <!--jpa的提供者--> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <!--声明数据库连接的驱动--> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <!--jdbc数据库的连接地址--> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/manager?characterEncoding=gbk"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="123456"/> <!--配置方言--> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <!--激活查询日志功能--> <property name="hibernate.show_sql" value="true"/> <!--优雅地输出Sql--> <property name="hibernate.format_sql" value="true"/> <!--添加一条解释型标注--> <property name="hibernate.use_sql_comments" value="false"/> <!--配置如何根据java模型生成数据库表结构,常用update,validate--> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence> ``` applicationContext.xml配置 ``` <!--第二步--> <!--定义实体的工厂bean--> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitName" value="userPU" /> <property name="persistenceXmlLocation" value="classpath:persistence.xml"></property> </bean> <!--第三步--> <!--定义事务管理器--> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> ``` 以上是连接MySql的配置,现在我想在连接SqlServer,应该怎么配置,在写一个persistent和applicationContext?

请问在Spring+Hibernate框架下连接两个数据库

两个数据库都是MySql的,一个在我本机,一个在我同事那,在ApplicationContext.xml里配两个DataSource,还需要配置哪些? 然后我在dao使用时怎么分别查询不同数据库的数据? 抱歉啊,新用户,没那个C币。

spring+hibernate4配置多个数据源问题

配置了2个数据源,对应了2个sessionFactory。默认使用的sessionFactory由spring自动创建线程的,但是另外的一个,创建后,在执行sql时直接使用session.getCurrentSession()线程出现问题:No Session found for current thread,能否通过配置自动创建线程,并且使用后自动回收。使用session.openSession()可以,但是要手动关闭,和手动开启,并且如果使用这种方式,感觉配置1个sessionFactory就可以了,只要切换数据源的方法使用openSession()就可以,有没有办法让spring对两个不同的都进行管理。

spring+hibernate操作数据库,可以查询数据,但是不能添加数据

![图片说明](https://img-ask.csdn.net/upload/201704/20/1492676808_116734.jpg)![图片说明](https://img-ask.csdn.net/upload/201704/20/1492676698_458828.jpg)! 2017-04-20 14:10:46,066 [main] DEBUG [org.hibernate.engine.spi.ActionQueue] - Executing identity-insert immediately 2017-04-20 14:10:46,080 [main] DEBUG [org.hibernate.SQL] - insert into t_user2 (password, user_name) values (?, ?) Hibernate: insert into t_user2 (password, user_name) values (?, ?) 2017-04-20 14:10:46,121 [main] DEBUG [org.hibernate.resource.jdbc.internal.ResourceRegistryStandardImpl] - HHH000387: ResultSet's statement was not registered 2017-04-20 14:10:46,124 [main] DEBUG [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - could not insert: [com.lk.domain.User] [insert into t_user2 (password, user_name) values (?, ?)] java.sql.SQLException: Invalid value for getInt() - '��

在spring中禁止hibernate随spring启动

我有这样一个需求,一个程序在初次启动的时候,等用户打开浏览器,在浏览器中输入数据库名,链接地址,密码,数据库类型之后开始连接数据库。但现在是hibernate随spring容器启动,怎样才能阻止hibernate启动呢,等我想让hibernate和数据库连接的时候才开始连接?

spring hibernate使用双数据源

配置了两个sessionfactory,在dao中使用getCurrentSession报错no current session in thread,用openSession报错org.hibernate.service.UnknownServiceException: Unknown service requested ,跟进去发现有一个tenantidentifier的变量为null。求大神解答怎么解决,试过好多方法都没办法解决。

hibernate ,JDBC插入大量数据优化问题

基于struts2+spring+hibernate框架下的java WEB项目,使用hibernate进行插入大量数据超时的问题 由于业务逻辑需要,需要一次性向数据库插入3百万条数据,时间太长客户无法接受。请问有什么办法能提高插入数据的效率? 保存实现方法: public void saveAll(Collection<T> entities) { log.info("saving " + this.eneity + " instance"); try { getHibernateTemplate().saveOrUpdateAll(entities); log.info("save successful"); } catch (RuntimeException re) { log.error("save failed", re); throw re; } } 数据库:Oracle 三百万条数据正常插入数据库需要多少时间?要提高效率该怎么优化?有什么方案? 最快能能到优化到多少分钟以内,十分钟内是否有可能?

使用ssh框架做新增功能时无法将数据写入数据库

在spring配置文件中配置了事务管理 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 开启事务注解 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 开启注解扫描 --> <context:component-scan base-package="com"></context:component-scan > 而且在类上面也开启了事务注解: import javax.transaction.Transactional; import com.dao.YongHuDao; import com.entity.YongHu; import com.service.YongHuService; @Transactional public class YongHuServiceImpl implements YongHuService { private YongHuDao yhdi; @Override public void add(YongHu t) { yhdi.add(t); } 控制台没有错误信息,只输出一条查询伪表id的sql语句: DEBUG - Found thread-bound Session for HibernateTemplate DEBUG - trace com.mchange.v2.resourcepool.BasicResourcePool@58aff4cd [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@49056629) Hibernate: select hibernate_sequence.nextval from dual DEBUG - Not closing pre-bound Hibernate Session after HibernateTemplate hahahhaah26hahahahhahha DEBUG - Entering nullPropertyValue [target=[com.entity.YongHu@2e81070, com.action.UserAction@3e625613, com.opensymphony.xwork2.DefaultTextProvider@17e36931], property=struts] DEBUG - Entering nullPropertyValue [target=[com.entity.YongHu@2e81070, com.action.UserAction@3e625613, com.opensymphony.xwork2.DefaultTextProvider@17e36931], property=org] DEBUG - after Locale=zh_CN 实在找不出哪里错了,求大神解答

关于spring注解定时任务查hibernate没有释放连接

![图片说明](https://img-ask.csdn.net/upload/201510/28/1446012538_418814.png) ![图片说明](https://img-ask.csdn.net/upload/201510/28/1446012640_443608.png) 如图,我按照网上的教程配置好了spring 的注解定时任务,但是每次执行了几次以后,数据库的连接数就上升,连接数没释放,我的是spring 管理hibernate关闭session的,别的类都没有这个问题,唯独是这个TimeService不能关闭。当然,我自己open一个Session是没有问题的,连接数不能上升,但是我想更加简便,而不需要每次都要我打开一个session关闭它。

hibernate配置文件中数据库密码加密

求大神支招啊。。。 **这是的hibernate.xml** <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property> <!-- c3lzdGVt cGFuaGFv --> <property name="connection.username">c3lzdGVt</property> <property name="connection.password">cGFuaGFv</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="myeclipse.connection.profile">a</property> <mapping resource="pojo/Nametable.hbm.xml" /> </session-factory> </hibernate-configuration> **这是的Sessionfactory里面加载hibernate.xml的部分** static { try { configuration.configure(configFile); //得到hibernate配置文件中的密码 String password = configuration.getProperty("connection.password"); System.out.println("//-配置文件中password:"+password); //调用密钥解密 String keyword = SimpleDESCrypto.APPOINT_KEY_WORD; //先用base64解码 byte[] data = SimpleDESCrypto.decodeByBase64(password); //decrypt解密 String realPassword = new String(SimpleDESCrypto.decrypt(keyword, data)); System.out.println("//---解密后的密码-------realPassword:"+realPassword); //将解密后的密码设置到hibernate配置文件中 configuration.setProperty("connection.password", realPassword); String pass=configuration.getProperty("connection.password"); System.out.println("从配置文件中得到的密码"+pass); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } 可以得到加密后的密码,然后解密,也可以解出来,再设置到hibernate中的时候就设置不进去了。不知道是什么原因,帮帮忙呀。谢谢。

请教:spring配置mysql/access多数据源的动态切换问题,急用,十分感谢!

请教:spring配置mysql/access多数据源在切换到access数据源时抛No Session found for current thread错误是怎么回事?请大侠详加指导,十分感谢,急用!我的配置文件如下: <?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:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd" default-autowire="byName" default-lazy-init="false"> <!-- 自动扫描dao和service包(自动注入) --> <context:component-scan base-package="org.framework.core.common.dao.*" /> <context:component-scan base-package="org.framework.core.common.service.*" /> <!-- 加载service,此时要排除要controller,因为controller已经spring-mvc中加载过了 --> <context:component-scan base-package="test.*,framework.*"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 引入属性文件 --> <context:property-placeholder location="classpath:dbconfig.properties" /> <!-- 配置数据源1 --> <bean name="mysqlDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc.url.mysql}" /> <property name="username" value="${jdbc.username.jeecg}" /> <property name="password" value="${jdbc.password.jeecg}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="0" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="20" /> <!-- 连接池最大空闲 --> <property name="maxIdle" value="20" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="0" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000" /> <!-- <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> --> <property name="validationQuery" value="${validationQuery.sqlserver}" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> </bean> <!-- 数据源2 : access数据源 --> <bean id="accessDataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="sun.jdbc.odbc.JdbcOdbcDriver" /> <property name="url" value="jdbc:odbc:users" /> <property name="username" value="" /> <property name="password" value="" /> </bean> <!-- access sessionFactory --> <bean id="aceessSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="accessDataSource" /> <property name="hibernateProperties"> <props> <!-- access 语法和MSSQL相似 所以用的MSSQL方言,或者可以使用第三方方言 --> <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> <prop key="hibernate.jdbc.batch_size">30</prop> <prop key="hibernate.jdbc.fetch_size">50</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">false</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <!-- 数据源集合 --> <bean id="dataSource" class="org.jeecgframework.core.extend.datasource.DynamicDataSource"> <property name="targetDataSources"> <map key-type="org.jeecgframework.core.extend.datasource.DataSourceType"> <entry key="mysqlDataSource" value-ref="mysqlDataSource" /> </map> </property> <property name="defaultTargetDataSource" ref="mysqlDataSource" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="entityInterceptor" ref="hiberAspect"/> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop> </props> </property> <!-- 注解方式配置 --> <property name="packagesToScan"> <list> <value>system.pojo.*</value> <value>demo.entity.*</value> <value>test.entity.*</value> <value>test.bussiness.db.UserInfo</value> </list> </property> </bean> <bean id="accessJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="accessDataSource"/> </property> </bean> <bean id="accessTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="aceessSessionFactory"></property> </bean> <tx:advice id="txAdvice" transaction-manager="accessTransactionManager"> <tx:attributes> <tx:method name="exists" read-only="true" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="create*" propagation="REQUIRED" /> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="merge*" propagation="REQUIRED" /> <tx:method name="del*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="put*" propagation="REQUIRED" /> <tx:method name="use*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" /> <tx:method name="count*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="list*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <aop:advisor advice-ref="txAdvice" pointcut="execution(* cors.bussiness.db..*.*(..))" /> </aop:config> <!-- JDBC配置 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <!-- JDBC配置 --> <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg ref="dataSource" /> </bean> <!-- 配置事物管理器,在*ServiceImpl里写@Transactional就可以启用事物管理 --> <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>

关于spring+hibernate配置多数据源的问题

我的项目是个webservice项目,使用了hibernate+spring框架,由于项目中要用到两个数据库(都是oracle数据库),我在网上查了一些资料,但是在我的项目中做数据源切换的时候总是切换不过去,也就是说只能连接默认的数据源,一下是我的spring配置文件: <?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:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName"> <context:annotation-config /> <!-- AXIS2通过该对象加载spring中的bean 固定配置 --> <bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" /> <!-- end --> <!-- AXIS2本地业务配置 --> <bean id="PAPWebService" class="com.pap.ws.PAPWebService" /> <!-- end --> <context:component-scan base-package="com.pap"> <context:include-filter type="regex" expression=".dao.impl.*" /> <context:include-filter type="regex" expression=".serviec.impl.*" /> <context:include-filter type="regex" expression=".entity.*" /> </context:component-scan> <bean id="tmsDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="driverUrl" value="jdbc:oracle:thin:@172.17.30.80:1521:tms" /> <property name="user" value="SELFSERVICE" /> <property name="password" value="Password123" /> <!-- 最大数据库连接数 --> <property name="maximumConnectionCount" value="100" /> <!-- 最小数据库连接数 --> <property name="minimumConnectionCount" value="3" /> <!-- 最少保持的空闲连接数(默认2个) --> <property name="prototypeCount" value="3" /> <!-- 没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 --> <!-- <property name="maximumNewConnections" value="20"/> --> <!-- 最大的并发连接数 --> <property name="simultaneousBuildThrottle" value="50" /> <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒 --> <property name="houseKeepingSleepTime" value="10000" /> <!-- 用于保持连接的测试语句 --> <property name="houseKeepingTestSql" value="select sysdate from dual" /> <!-- 在使用之前测试 --> <property name="testBeforeUse" value="true" /> </bean> <bean id="hisDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="driverUrl" value="jdbc:oracle:thin:@172.17.1.252:1521:ORCL" /> <property name="user" value="system" /> <property name="password" value="aaaaaa" /> <!-- 最大数据库连接数 --> <property name="maximumConnectionCount" value="100" /> <!-- 最小数据库连接数 --> <property name="minimumConnectionCount" value="3" /> <!-- 最少保持的空闲连接数(默认2个) --> <property name="prototypeCount" value="3" /> <!-- 没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 --> <!-- <property name="maximumNewConnections" value="20"/> --> <!-- 最大的并发连接数 --> <property name="simultaneousBuildThrottle" value="50" /> <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒 --> <property name="houseKeepingSleepTime" value="10000" /> <!-- 用于保持连接的测试语句 --> <property name="houseKeepingTestSql" value="select sysdate from dual" /> <!-- 在使用之前测试 --> <property name="testBeforeUse" value="true" /> </bean> <bean id="dynamicDataSource" class="com.pap.datasource.DynamicDataSource"> <!-- 通过key-value的形式来关联数据源 --> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry value-ref="tmsDataSource" key="tmsDataSource"></entry> <entry value-ref="hisDataSource" key="hisDataSource"></entry> </map> </property> <property name="defaultTargetDataSource" ref="tmsDataSource"> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dynamicDataSource" /> <property name="packagesToScan"> <list> <value>com.pap.entity</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> --> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> </beans> 下面是我写的两个用于切换数据源的类: DataSourceContextHolder.java package com.pap.datasource; public class DataSourceContextHolder { public static final String DATA_SOURCE_TMS = "tmsDataSource"; public static final String DATA_SOURCE_HIS = "hisDataSource"; private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static void setDataSourceType(String customerType) { contextHolder.set(customerType); } public static String getDataSourceType() { return contextHolder.get(); } public static void clearDataSourceType() { contextHolder.remove(); } } DynamicDataSource.java package com.pap.datasource; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDataSourceType(); } } dao层代码 package com.pap.dao.impl; import java.io.Serializable; import java.util.List; import org.hibernate.criterion.DetachedCriteria; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import com.pap.dao.BaseDao; @Repository("baseDao") public class BaseDaoImpl extends HibernateDaoSupport implements BaseDao{ @Override public <T> Serializable save(T entity) throws Exception { Serializable s = this.getHibernateTemplate().save(entity); return s; } @Override public <T> void update(T entity) throws Exception { this.getHibernateTemplate().update(entity); } @SuppressWarnings("unchecked") @Override public <T> List<T> query(String hql,Object[] values) throws Exception { return this.getHibernateTemplate().find(hql, values); } @Override public <T> List<T> query(String hql, Object value) throws Exception { return query(hql, new Object[]{value}); } @Override public <T>T getEntity(Class<T> entityClass, Serializable id) throws Exception { return this.getHibernateTemplate().get(entityClass, id); } @SuppressWarnings("unchecked") @Override public <T> List<T> find(DetachedCriteria detachedCriteria, int firstResult, int maxResults) throws Exception { return getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResults); } @Override @SuppressWarnings("unchecked") public <T> List<T> find(DetachedCriteria criteria) throws Exception { return getHibernateTemplate().findByCriteria(criteria); } } service层代码,我是在这里做的数据源切换 package com.pap.service.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.pap.dao.BaseDao; import com.pap.datasource.DataSourceContextHolder; import com.pap.entity.ChargeTypeDict; import com.pap.entity.ClinicForRegist; import com.pap.entity.MedicalCard; import com.pap.entity.Patient; import com.pap.entity.SelfTerminal; import com.pap.entity.TransactionRecord; import com.pap.entity.User; import com.pap.service.BaseService; @Service @Transactional(propagation = Propagation.REQUIRED) public class BaseServiceImpl implements BaseService { @Resource private BaseDao baseDao; /** * 查询排号信息 */ @Override public List<ClinicForRegist> queryClinicForRegist(java.sql.Date clinicDate, Object[] timeDesc, int firstResult, int maxResults) throws Exception { DataSourceContextHolder.setDataSourceType(DataSourceContextHolder.DATA_SOURCE_HIS); DetachedCriteria detachedCriteria = DetachedCriteria.forClass(ClinicForRegist.class); detachedCriteria.add(Restrictions.eq("clinicDate", clinicDate)); detachedCriteria.add(Restrictions.in("timeDesc", timeDesc)); List<ClinicForRegist> list = baseDao.find(detachedCriteria, firstResult, maxResults); DataSourceContextHolder.clearDataSourceType(); return list; } } webservice接口类 package com.pap.ws; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.apache.log4j.Logger; import com.pap.entity.ChargeTypeDict; import com.pap.entity.ClinicForRegist; import com.pap.entity.ClinicIndex; import com.pap.entity.DeptDict; import com.pap.entity.MedicalCard; import com.pap.entity.Patient; import com.pap.entity.Privileges; import com.pap.entity.Response; import com.pap.entity.SelfTerminal; import com.pap.entity.TransactionRecord; import com.pap.entity.User; import com.pap.service.BaseService; import com.pap.util.MD5Util; public class PAPWebService { @Resource BaseService baseService; /** * 查询可挂号信息 * @param firstResult 起始条数 * @param maxResults 最大条数 * @return */ public Response queryClinicRegist(int firstResult, int maxResults) { Response response = new Response(); try { Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); String[] timeDesc = null; if (8 < hour && hour < 12) { timeDesc = new String[] { "白天", "上午", "下午", "昼夜" }; } else if (hour > 11 && hour < 18) { timeDesc = new String[] { "白天", "下午", "昼夜" }; } else { timeDesc = new String[] {"昼夜" }; } List<ClinicForRegist> list = baseService.queryClinicForRegist(new java.sql.Date(calendar.getTimeInMillis()), timeDesc, firstResult, maxResults); if(list.size() > 0){ response.setResult("S"); response.setArrayData(list); }else{ response.setResult("F"); response.setResult("没有查询到记录"); } } catch (Exception e) { e.printStackTrace(); response.setResult("F"); response.setErrorInfo(e.getMessage()); } return response; } public void setClinicForRegist(ClinicForRegist clinicForRegist){ } public void setClinicIndex(ClinicIndex clinicIndex){ } public void setDeptDict(DeptDict deptDict){ } }

spring + hibernate 动态切换数据源

项目用的是struts2 + spring + hibernate,项目的查询基本上用的都是SQL原生查询, 获取连接的方式是用hibernate的session.connection();(如下图所示),现在需要动态 切换数据源,要如何才能改变数据源呢? ![图片说明](https://img-ask.csdn.net/upload/201701/18/1484706178_817129.png)

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

阿里面试官让我用Zk(Zookeeper)实现分布式锁

他可能没想到,我当场手写出来了

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

立即提问
相关内容推荐