马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、SpringDao组件概述
在Spring框架中,DAO(Data Access Object)组件用于实现与数据库交互的数据访问操作。Spring提供了多种方式来利用DAO,包括JdbcTemplate、HibernateTemplate以及Spring Data JPA等。这些工具简化了数据库操作,进步了开辟服从,并减少了代码复杂性。
二、SpringDao组件的基本用法
1. 添加依赖
首先,需要在项目标构建文件中添加Spring JDBC的依赖。例如,对于Maven项目,可以在pom.xml文件中添加以下依赖:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
复制代码 2. 配置数据源
在Spring的配置文件中配置数据源(DataSource),用于毗连数据库。例如:
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
- <property name="username" value="username"/>
- <property name="password" value="password"/>
- </bean>
复制代码 3. 创建DAO接口
界说一个DAO接口,用于声明数据访问的方法。例如:
- public interface UserDao {
- User getUserById(int id);
- void addUser(User user);
- void updateUser(User user);
- void deleteUser(int id);
- }
复制代码 4. 实现DAO接口
创建一个DAO的实现类,实现DAO接口中界说的方法。例如:
- @Repository
- public class UserDaoImpl implements UserDao {
- @Autowired
- private JdbcTemplate jdbcTemplate;
- @Override
- public User getUserById(int id) {
- String sql = "SELECT id, name, email FROM users WHERE id = ?";
- return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));
- }
- @Override
- public void addUser(User user) {
- String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
- jdbcTemplate.update(sql, user.getName(), user.getEmail());
- }
- @Override
- public void updateUser(User user) {
- String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
- jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
- }
- @Override
- public void deleteUser(int id) {
- String sql = "DELETE FROM users WHERE id = ?";
- jdbcTemplate.update(sql, id);
- }
- }
复制代码 5. 配置组件扫描
在Spring的配置文件中配置组件扫描,以便可以或许主动发现和注册DAO组件。例如:
- <context:component-scan base-package="com.example.dao"/>
复制代码 6. 利用DAO
在需要利用DAO的地方,通过@Autowired注解将DAO引入到其他类中,即可利用DAO提供的数据访问方法。例如:
- @Service
- public class UserService {
- @Autowired
- private UserDao userDao;
- public User getUserById(int id) {
- return userDao.getUserById(id);
- }
- public void addUser(User user) {
- userDao.addUser(user);
- }
- // 其他方法...
- }
复制代码 三、不同ORM的SpringDao用法
1. Spring Data JPA
Spring Data JPA是Spring对JPA(Java Persistence API)的封装和扩展,通过简单的接口和注解,可以实现主动生成SQL语句、事务管理等功能。
1.1 添加依赖
在项目标pom.xml文件中添加Spring Data JPA的依赖:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
复制代码 1.2 配置数据源和JPA属性
在application.properties或application.yml文件中配置数据源和JPA相干属性:
- spring.datasource.url=jdbc:mysql://localhost:3306/your_database
- spring.datasource.username=your_username
- spring.datasource.password=your_password
- spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- spring.jpa.hibernate.ddl-auto=update
- spring.jpa.show-sql=true
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
复制代码 1.3 创建实体类
界说实体类,并利用JPA注解来映射数据库表。例如:
- import javax.persistence.Entity;
- import javax.persistence.Id;
- import javax.persistence.Table;
- @Entity
- @Table(name = "user")
- public class User {
- @Id
- private Long id;
- private String name;
- private Integer age;
- // 其他字段及getter和setter方法
- }
复制代码 1.4 创建堆栈接口
创建一个继续自JpaRepository或CrudRepository的接口,并指定实体类。例如:
- import org.springframework.data.jpa.repository.JpaRepository;
- public interface UserRepository extends JpaRepository<User, Long> {
- // 可以在这里定义自定义查询方法
- }
复制代码 1.5 利用堆栈
在服务层注入堆栈,并利用其提供的方法举行数据库操作。例如:
- @Service
- public class UserService {
- @Autowired
- private UserRepository userRepository;
- public User findById(Long id) {
- return userRepository.findById(id).orElse(null);
- }
- // 其他服务方法...
- }
复制代码 2. Hibernate
Hibernate是一个盛行的ORM框架,Spring提供了对Hibernate的良好支持。
2.1 添加依赖
在项目标pom.xml文件中添加Hibernate的依赖:
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>5.4.21.Final</version>
- </dependency>
复制代码 2.2 配置Hibernate
在Spring的配置文件中配置Hibernate的SessionFactory。例如:
- <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource"/>
- <property name="packagesToScan" value="com.example.entity"/>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
- <prop key="hibernate.show_sql">true</prop>
- </props>
- </property>
- </bean>
复制代码 2.3 创建实体类
利用Hibernate注解来映射数据库表。例如:
- import javax.persistence.Entity;
- import javax.persistence.Id;
- import javax.persistence.Table;
- @Entity
- @Table(name = "user")
- public class User {
- @Id
- private Long id;
- private String name;
- private Integer age;
- // 其他字段及getter和setter方法
- }
复制代码 2.4 创建DAO接口和实现类
界说一个DAO接口,并创建一个实现类来实验数据库操作。例如:
- public interface UserDao {
- User getUserById(Long id);
- void addUser(User user);
- void updateUser(User user);
- void deleteUser(Long id);
- }
- @Repository
- public class UserDaoImpl implements UserDao {
- @Autowired
- private SessionFactory sessionFactory;
- @Override
- public User getUserById(Long id) {
- return sessionFactory.getCurrentSession().get(User.class, id);
- }
- @Override
- public void addUser(User user) {
- sessionFactory.getCurrentSession().save(user);
- }
- @Override
- public void updateUser(User user) {
- sessionFactory.getCurrentSession().update(user);
- }
- @Override
- public void deleteUser(Long id) {
- User user = sessionFactory.getCurrentSession().load(User.class, id);
- sessionFactory.getCurrentSession().delete(user);
- }
- }
复制代码 3. MyBatis
MyBatis是一个基于Java的持久层框架,通过XML或注解的方式将SQL语句与Java代码分离。
3.1 添加依赖
在项目标pom.xml文件中添加MyBatis的依赖:
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>2.1.4</version>
- </dependency>
复制代码 3.2 配置MyBatis
在application.properties或application.yml文件中配置MyBatis的相干属性。例如:
- mybatis.mapper-locations=classpath:mapper/*.xml
- mybatis.type-aliases-package=com.example.entity
复制代码 3.3 创建实体类
界说实体类,并利用MyBatis注解或XML映射文件来映射数据库表。例如:
- public class User {
- private Long id;
- private String name;
- private Integer age;
- // getter和setter方法
- }
复制代码 3.4 创建Mapper接口和XML映射文件
界说一个Mapper接口,并创建一个对应的XML映射文件来界说SQL语句。例如:
- public interface UserMapper {
- User selectUserById(@Param("id") Long id);
- void insertUser(User user);
- void updateUser(User user);
- void deleteUser(@Param("id") Long id);
- }
复制代码 对应的XML映射文件UserMapper.xml:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.example.mapper.UserMapper">
- <select id="selectUserById" resultType="com.example.entity.User">
- SELECT * FROM user WHERE id = #{id}
- </select>
- <insert id="insertUser" parameterType="com.example.entity.User">
- INSERT INTO user (name, age) VALUES (#{name}, #{age})
- </insert>
- <update id="updateUser" parameterType="com.example.entity.User">
- UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
- </update>
- <delete id="deleteUser" parameterType="long">
- DELETE FROM user WHERE id = #{id}
- </delete>
- </mapper>
复制代码 3.5 利用Mapper
在服务层注入Mapper,并利用其提供的方法举行数据库操作。例如:
- @Service
- public class UserService {
- @Autowired
- private UserMapper userMapper;
- public User getUserById(Long id) {
- return userMapper.selectUserById(id);
- }
- public void addUser(User user) {
- userMapper.insertUser(user);
- }
- // 其他服务方法...
- }
复制代码 四、SpringDao组件的常见异常范例及处理方式
在Spring Framework中,DAO层通常会抛出各种数据访问相干的异常。以下是一些常见的异常范例及其扼要形貌和处理方式:
1. DataAccessException
- 形貌:Spring框架中所有数据访问异常的通用父异常。它捕捉了底层数据访问技术(如JDBC、Hibernate、JPA等)可能抛出的异常,并提供了一个一样平常性的异常范例,以便在DAO层捕捉和处理这些异常。
- 处理方式:在DAO层捕捉DataAccessException,并根据详细异常范例举行相应处理。例如,可以记录日志、回滚事务或向用户返回错误信息等。
2. DuplicateKeyException
- 形貌:当尝试在数据库中插入具有唯一约束的数据,并且已经存在具有雷同唯一键值的记录时,将引发此异常。通常对应于SQL中的唯一键冲突。
- 处理方式:在插入数据前检查是否已存在雷同键值的记录,或者捕捉DuplicateKeyException并提示用户该键值已存在。
3. DataIntegrityViolationException
- 形貌:表现数据库约束完备性的违反,如外键约束、非空约束等。当数据库操作违反了这些约束时,将抛出此异常。
- 处理方式:检查数据库操作是否违反了约束条件,并在必要时修改数据或业务逻辑以制止此类异常。
4. UncategorizedSQLException
- 形貌:一个通用的SQL异常,用于表现在实验SQL操作时发生的未分类的问题。通常,这种异常包含有关底层数据库错误的详细信息。
- 处理方式:根据异常信息诊断问题缘故原由,并采取相应的修复措施。例如,可能是SQL语句语法错误或数据库毗连问题。
5. InvalidDataAccessApiUsageException
- 形貌:表现在利用Spring的数据访问API时发生的非法操作。例如,利用不支持的特性或方法可能会引发此异常。
- 处理方式:检查API利用方法是否正确,并确保依照Spring数据访问API的规范。
6. TransientDataAccessResourceException
- 形貌:当底层数据资源(例如数据库服务器)出现临时问题时,可能会抛出此异常。通常,这是一个短暂的错误,可以尝试重新实验操作。
- 处理方式:捕捉此异常并重试操作,或者向用户提示稍后再试。
7. ObjectOptimisticLockingFailureException
- 形貌:用于表现在乐观锁定机制下的并发冲突。当两个或多个客户端尝试同时修改雷同的数据时,可能会发生此异常。
- 处理方式:实现冲突办理议略,如提示用户重新加载数据并再次尝试提交更改。
8. IncorrectResultSizeDataAccessException
- 形貌:当查询的效果集巨细与预期不符时,将抛出此异常。例如,渴望只有一个效果但查询返回多个效果时,或者渴望多个效果但查询只返回一个效果时。
- 处理方式:检查查询条件和逻辑,确保查询效果符合预期。
9. EmptyResultDataAccessException
- 形貌:当查询未返回任何效果但渴望至少有一个效果时,将抛出此异常。
- 处理方式:处理空效果集的情况,例如返回默认值或向用户提示未找到数据。
10. CannotAcquireLockException
- 形貌:在尝试获取锁时失败时抛出此异常,例如在数据库事务中无法获得锁定资源时。
- 处理方式:实现重试逻辑或调解事务隔离级别以减少锁竞争。
五、末端
SpringDao组件是Spring框架中用于实现数据访问操作的重要部分。通过集成不同的ORM框架(如JPA、Hibernate、MyBatis等),SpringDao组件提供了灵活且强大的数据访问本领。在实际开辟中,相识并掌握SpringDao组件的基本用法和常见异常处理方式是至关重要的。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |