标签:
jar包:
基本的文件框架:

1.首先配置jdbc的连接数据,也就是db.properties
此处注意在url上,这里不是xml文件,不需要加上amp。用一个问号就可以
1 2 3 4 | user=rootpassword=driverClass=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/spring001?useUnicode=true&characterEncoding=UTF-8 |
2.在 spring-config.xml 的spring容器中配置好加载db.properites的语句:
1 2 3 4 5 6 7 8 9 10 11 12 | <context:property-placeholder location="classpath:db.properties"/> <!--扫描的--> <context:component-scan base-package="com"/> <!--数据源--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${user}"/> <property name="password" value="${password}"/> <property name="driverClass" value="${driverClass}"/> <property name="jdbcUrl" value="${url}"/> </bean> |
3.用idea从设计好的数据库表格生成实体类和映射文件
BooInfo.java和Buyer.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package com.entities;import javax.persistence.*;/** * Created by Anonymous on 2016/3/19. */@Entity@Table(name = "book_info", schema = "spring001")public class BookInfo { private int id; private String bookname; private Integer bookprice; private Integer booknum; @Override public String toString() { return "BookInfo{" + "id=" + id + ", bookname=‘" + bookname + ‘\‘‘ + ", bookprice=" + bookprice + ", booknum=" + booknum + ‘}‘; } @Id @Column(name = "id", nullable = false) public int getId() { return id; } public void setId(int id) { this.id = id; } @Basic @Column(name = "BOOKNAME", nullable = true, length = 255) public String getBookname() { return bookname; } public void setBookname(String bookname) { this.bookname = bookname; } @Basic @Column(name = "BOOKPRICE", nullable = true) public Integer getBookprice() { return bookprice; } public void setBookprice(Integer bookprice) { this.bookprice = bookprice; } @Basic @Column(name = "BOOKNUM", nullable = true) public Integer getBooknum() { return booknum; } public void setBooknum(Integer booknum) { this.booknum = booknum; }} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package com.entities;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;@Entitypublic class Buyer { private int id; private String user; private Integer money; @Id @Column(name = "ID", nullable = false) public int getId() { return id; } public void setId(int id) { this.id = id; } @Basic @Column(name = "USER", nullable = true, length = 255) public String getUser() { return user; } public void setUser(String user) { this.user = user; } @Basic @Column(name = "MONEY", nullable = true) public Integer getMoney() { return money; } public void setMoney(Integer money) { this.money = money; }} |
4.在ioc配置文件中配置好sessionFactory,在这里写好了hibernate.cfg.xml的内容,就不用生成它了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!--hibernate的工厂--> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingLocations" value="classpath:*.hbm.xml"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> </props> </property> </bean> |
映射文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xml version=‘1.0‘ encoding=‘utf-8‘?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<hibernate-mapping> <class name="com.entities.BookInfo" table="book_info" schema="spring001"> <id name="id"> <column name="id" sql-type="int(11)"/> <generator class="native"/> </id> <property name="bookname"> <column name="BOOKNAME" sql-type="varchar(255)" not-null="true"/> </property> <property name="bookprice"> <column name="BOOKPRICE" sql-type="int(11)" not-null="true"/> </property> <property name="booknum"> <column name="BOOKNUM" sql-type="int(11)" not-null="true"/> </property> </class></hibernate-mapping> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version=‘1.0‘ encoding=‘utf-8‘?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<hibernate-mapping> <class name="com.entities.Buyer" table="buyer" schema="spring001"> <id name="id"> <column name="ID" sql-type="int(11)"/> <generator class="native"/> </id> <property name="user"> <column name="USER" sql-type="varchar(255)" not-null="true"/> </property> <property name="money"> <column name="MONEY" sql-type="int(11)" not-null="true"/> </property> </class></hibernate-mapping> |
5.写买书的一个接口好实现类:
SomeActions.java 和SomeActionsImpl.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.com.actions;/** * Created by Anonymous on 2016/3/19. */public interface SomeActions { //获取所有书本的信息 public void getBooksInfo(); //获取某一个本书的价格 public int checkBookPrice(String bookName); //买书后更新书的数量 public void updateBookNum(String bookName); //买书后更新人的钱 public void updateBuyerMoney(String userName, int price);} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | package com.com.actions;import com.entities.BookInfo;import com.exceptions.BookNumException;import com.exceptions.CheckNullException;import com.exceptions.MoneyCheckException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import java.util.Iterator;import java.util.List;@Repositorypublic class SomeActionsImpl implements SomeActions { @Autowired private SessionFactory factory; public Session getSession() { return factory.getCurrentSession(); } @Override public void getBooksInfo() { String hql = "From BookInfo"; Query query = getSession().createQuery(hql); List<BookInfo> list = query.list(); Iterator it = list.iterator(); while (it.hasNext()) { BookInfo info = (BookInfo) it.next(); System.out.println(info); } } @Override public int checkBookPrice(String bookName) { String hql = "select bookprice from BookInfo where bookname=:bookname"; Query query = getSession().createQuery(hql); query.setString("bookname", bookName); if (query.uniqueResult() == null) { throw new CheckNullException("检索数据库中无此内容,请检查输入内容是否包含在数据库中......"); } else { return (Integer) query.uniqueResult(); } } @Override public void updateBookNum(String bookName) { String hql1 = "select bookprice from BookInfo where bookname=:bookname"; int bookNum = (Integer) getSession().createQuery(hql1).setString("bookname", bookName).uniqueResult(); if (bookNum == 0) { throw new BookNumException("库存不够了"); } String hql = "update BookInfo set booknum=booknum-1 where bookname=:bookname"; getSession().createQuery(hql).setString("bookname", bookName).executeUpdate(); } @Override public void updateBuyerMoney(String userName, int price) { String hql1 = "select money from Buyer where user=:user"; Query query = getSession().createQuery(hql1).setString("user", userName); int money = (Integer) query.uniqueResult(); if (money < price) { throw new MoneyCheckException("余额不够了....."); } String hql = "update Buyer set money=money-:price where user=:user"; getSession().createQuery(hql).setInteger("price", price).setString("user", userName).executeUpdate(); }} |
6.写几个简单的继承runtimeException的类,提示出错信息:三个内容一样,就是类名不一样:
BookNumException.java和CheckNullException.java和MoneyCheckException.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.exceptions;/** * Created by Anonymous on 2016/3/19. */public class MoneyCheckException extends RuntimeException { public MoneyCheckException() { super(); } public MoneyCheckException(String message) { super(message); } public MoneyCheckException(String message, Throwable cause) { super(message, cause); } public MoneyCheckException(Throwable cause) { super(cause); } protected MoneyCheckException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); }} |
7.开始写事务的类,买一本书的类BuyOneBook.java
接口与实现类
1 2 3 4 5 6 7 8 | package com.services;public interface BuyOneBook { public void purchase(String buyerName, String bookName);} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package com.services;import com.com.actions.SomeActions;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class BuyOneBookImpl implements BuyOneBook { @Autowired private SomeActions actions; @Override public void purchase(String buyerName, String bookName) { actions.getBooksInfo(); int price = actions.checkBookPrice(bookName); actions.updateBookNum(bookName); actions.updateBuyerMoney(buyerName, price); }} |
买多本书的类,接口类与实现类:
1 2 3 4 5 6 7 8 9 10 11 12 | package com.services;import java.util.List;/** * Created by Anonymous on 2016/3/19. */public interface BuySomeBooks { public void buySome(String buyerName, List<String> bookNames);} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.services;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class BuySomeBooksImpl implements BuySomeBooks { @Autowired private BuyOneBook buyOneBook; @Override public void buySome(String buyerName, List<String> bookNames) { for (String s : bookNames) { buyOneBook.purchase(buyerName, s); } }} |
8.在ioc容器中配置事务方面的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!--事务管理器--> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!--配置切面,对哪些方法起作用,并且交给事务管理--> <tx:advice id="conn" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="purchase" propagation="REQUIRED"/> <tx:method name="get*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice> <!--配置切点,并且放到切面设置上--> <aop:config> <aop:pointcut id="pointCut" expression="execution(* com.services.*.*(..))"/> <aop:advisor advice-ref="conn" pointcut-ref="pointCut"></aop:advisor> </aop:config> |
完整的ioc文件:spring-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!--事务管理器--> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!--配置切面,对哪些方法起作用,并且交给事务管理--> <tx:advice id="conn" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="purchase" propagation="REQUIRED"/> <tx:method name="get*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice> <!--配置切点,并且放到切面设置上--> <aop:config> <aop:pointcut id="pointCut" expression="execution(* com.services.*.*(..))"/> <aop:advisor advice-ref="conn" pointcut-ref="pointCut"></aop:advisor> </aop:config> |
测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package com.test;import com.com.actions.SomeActions;import com.services.BuyOneBook;import com.services.BuySomeBooks;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import javax.sql.DataSource;import java.sql.SQLException;import java.util.Arrays;public class Main { private ApplicationContext ac = null; private BuyOneBook buyOneBook; private BuySomeBooks buySomeBooks; @Autowired private SomeActions someActions; public Main() { ac = new ClassPathXmlApplicationContext("spring-config.xml"); buyOneBook = ac.getBean(BuyOneBook.class); buySomeBooks = ac.getBean(BuySomeBooks.class); } @Test public void testBuyOne() { buyOneBook.purchase("Tom", "西游记"); } @Test public void testBuySome() { buySomeBooks.buySome("Tom", Arrays.asList("三国演义", "西游记")); } @Test public void testConnection() throws SQLException { DataSource dataSource = (DataSource) ac.getBean("dataSource"); System.out.println(dataSource.getConnection()); }} |
标签:
原文地址:http://www.cnblogs.com/share2015/p/5297015.html