Dans de nombreux scénarios, nous n'avons pas besoin d'utiliser JdbcTemplate pour faire fonctionner directement les instructions SQL. À l'heure actuelle, nous pouvons utiliser les outils ORM pour économiser beaucoup. du code et du temps de développement. Les outils ORM peuvent déplacer l'attention du code SQL sujet aux erreurs vers la manière de mettre en œuvre les besoins réels de l'application.
La prise en charge par Spring des frameworks ORM fournit des points d'intégration avec ces frameworks et quelques services supplémentaires :
Prend en charge l'intégration des transactions déclaratives Spring ;
Gestion transparente des exceptions ;
Classe de modèle légère et sécurisée pour les threads
Classe de support DAO ;
Gestion des ressources.
Hibernate est un framework ORM open source très populaire dans la communauté des développeurs.
mysql pour créer un nouveau magasin de base de données, puis exécutez le SQL suivant. :
1 create table Category (2 Id int not null,3 Name varchar(80) null,4 constraint pk_category primary key (Id)5 );6 7 INSERT INTO category(id,Name) VALUES (1,'女装');8 INSERT INTO category(id,Name) VALUES (2,'美妆');9 INSERT INTO category(id,Name) VALUES (3,'书籍');
L'IDE I l'utilisation est IdeaIU, via maven Construisez le projet et configurez Spring via XML. La structure du code terminée est :
class Category{ private int cateId; private String cateName; //次数省略get,set方法 @Override public String toString() { return "id="+cateId+" name="+cateName; } }
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.5.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> </dependencies>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/tx "> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/store"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:hibernate/hibernate.cfg.xml"/> </bean> <tx:annotation-driven/> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="categoryDao" class="CategoryDao"> <constructor-arg ref="sessionFactory"></constructor-arg> </bean> </beans>
dataSource est rien de spécial, je ne l'expliquerai plus. Jetez un œil à quelques autres points :
①hibernate sessionFactory :
L'interface principale requise pour utiliser Hibernate est org.hibernate.Session. CRUD de base et autres fonctionnalités d’accès aux données. Grâce à l'interface Session d'Hibernate, le Repository de l'application peut répondre à tous les besoins de persistance. La manière standard d'obtenir un objet Hibernate Session consiste à utiliser la classe d'implémentation de l'interface Hibernate SessionFactory.
Il y a deux propriétés principales définies dans la configuration sessionFactory : dataSource définit la connexion de données et configLocation définit le chemin d'accès au fichier de configuration de mise en veille prolongée.
②Transaction
Si le fonctionnement de la base de données prend en charge les transactions, vous devez configurer
①hibernate.cfg.xml
<?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="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <mapping resource="hibernate/Category.hbm.xml"/> </session-factory> </hibernate-configuration>
②Category.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Category" table="Category"> <id name="cateId" column="id"> <generator class="native"/> </id> <property name="cateName" column="name"/> </class> </hibernate-mapping>
Si la méthode veut prendre en charge les transactions, elle doit être annotée @Transactional.
public class CategoryDao { private SessionFactory sessionFactory; public CategoryDao(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } private Session currentSession() { return sessionFactory.getCurrentSession(); } @Transactional public void save(Category category) { currentSession().save(category); } @Transactional public void update(Category category){ currentSession().update(category); } @Transactional public void delete(int id) { Query query = currentSession().createSQLQuery("DELETE FROM category WHERE Id=::ID"); query.setInteger("::ID", id); query.executeUpdate(); } @Transactional public int count() { return getAll().size(); } @Transactional public Category getById(int id) { Criteria criteria=currentSession().createCriteria(Category.class); criteria.add(Restrictions.eq("id",id)); return (Category) criteria.uniqueResult(); } @Transactional public List<Category> getAll() { return currentSession().createCriteria(Category.class).list(); } }
@ContextConfiguration(locations = "classpath:applicationContext.xml") @RunWith(SpringJUnit4ClassRunner.class) public class testCategoryDao { @Autowired private CategoryDao categoryDao; @Test public void testAdd() { Category category = new Category(); category.setCateId(4); category.setCateName("母婴"); categoryDao.save(category); } @Test public void testUpdate() { Category category = new Category(); category.setCateId(4); category.setCateName("男装"); categoryDao.update(category); } @Test public void testGetById() { int id = 4; Category category = categoryDao.getById(id); if(category==null){ System.out.println("not exist"); }else { System.out.println(category.toString()); } } @Test public void testGetAll() { List<Category> categories = categoryDao.getAll(); for (Category item : categories) { System.out.println(item); } } @Test public void testCount() { int count = categoryDao.count(); System.out.println(count); } @Test public void testDelete() { int id = 4; categoryDao.delete(id); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!