SpringBoot-数据持久化

    xiaoxiao2022-07-05  186

    配置数据源

    在application.properties文件中进行配置

    spring.datasource.url=jdbc:mysql://lacalhost:3306/freeroom spring.datasource.username=root spring.datasource.password=123 # 最大等待连接中的数量 0无限制 spring.datasource.tomcat.max-idle=10 # 最大连接活动数 spring.datasource.tomcat.max-active=50 # 数据库连接池初始化连接数 spring.datasource.tomcat.initial-size=5

    JdbcTemplate

    JdbcTemplate模版是Spring框架提供的,在实际的工作使用较少,基本上都在使用Hibernate和MyBatis

    JPA(Hibernate)

    JPA(Java Persistence API ,java持久化API),在spring boot中JPA是依靠Hibernate才得以实现的。

    使用方法

    修改pom.xml

    添加jpa的依赖

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>

    定义一个实体

    @Entity(name = "user") @Table(name="jpademo") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id =null; @Column(name = "name") private String name=null; /** * setter and getter 必须要有不然拿不到数据 */ } @Entity 标注这是一个实体类@Table 配置的属性name指定映射数据库的表@Id 标注那个属性为表的逐渐@GeneratedValue配置采用何种策略生成主键@Column 如果属性名和数据库的不一致可以使用这个注解来指定

    定义一个接口

    interface JpaUserRespository extends JpaRepository<User,Long> { }

    此接口不用实现定义就行了,之后会自动注入

    查询

    @Controller @RequestMapping("/jpa") public class JpaController { @Autowired private JpaUserRespository jpaUserRespository = null; @RequestMapping("/getUser") @ResponseBody public User getUser(){ User user = jpaUserRespository.findAll().get(0); return user; } }

    在对数据进行操作的时候,使用自动注入的jpaUserRespository实例进行操作。

    最后一步

    最后需要将接口扫描到Spring IoC容器中。同时还需要将实体类(Entity Bean)注册给JPA。使用@EnableJpaRespositories和@EntityScan两个注解来实现

    @SpringBootApplication @EnableJpaRepositories @EntityScan public class FreeRomeApplication { public static void main(String[] args) { System.out.println("开始"); SpringApplication.run(FreeRomeApplication.class,args); System.out.println("结束"); } }

    JPA配置

    同样也是在application.properties

    # 选择Hibernate数据定义语言(DDl)策略为update spring.jpa.hibernate.ddl-auto=update

    JPA查询语言

    为了更加灵活的查询,可以使用JPA查询语言(JPQL)。使用方式是@Query标识语句。

    JPA命名查询

    在先前的JpaUserRespository接口中添加方法 例:

    public User findByName(String name);

    等效于

    select u from User u where u.name = ?1

    也就是说findByName 会根据相应表里的字段name来select 参数name就是要查询的内容

    MyBatis

    现目前java持久层最为主流的技术应该就是MyBatis,它更简单、灵活、易用。 参考教程

    使用方法

    基础配置

    MyBatis是基于SqlSessionFactory构建的框架

    添加依赖

    第一步也是要先引入依赖mybatis-spring-boot-starter和mysql-connector-java 可以在https://mvnrepository.com/找mybatis-spring-boot-starter的最新版本

    配置文件 server.port=8333 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/erp?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT+8 spring.datasource.username=root spring.datasource.password=153963 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 创建Bean public class User{ private int id; private String name; priavte int age; private double money; /** setter,getter and toString **/ }

    全注解方式

    Dao层开发 @Mapper public interface UserDao{ /** 1. 通过名字查询用户信息 **/ @Select("SELECT * FROM user WHERE name = #{name}") User findUserByName(@Param("name")String name); /** 2. 查询所有用户信息 **/ @Select("SELECT * FROM user") List<User> findAllUser(); /** 3. 插入用户信息 **/ @Insert("INSERT INTO user(name,age,money) Values(#{name},#{age},#{money})") void insertUser(@Param("name") String name,@Param("age") Integer age),@Param("money") Double money) /** * 根据 id 更新用户信息 */ @Update("UPDATE user SET name = #{name},age = #{age},money= #{money} WHERE id = #{id}") void updateUser(@Param("name") String name,@Param("age") Integer age, @Param("money") Double money,@Param("id") int id); /** * 根据 id 删除用户信息 */ @Delete("DELETE from user WHERE id = #{id}") void deleteUser(@Param("id") int id); } Service层 @Service public class UserService{ @Autowired private UserDao userDao; public User selectUserByName(String name){ return userDao.findUserByName(name); } /** *........ **/ /** * 根据id 删除用户 */ public void deleteService(int id) { userDao.deleteUser(id); } }

    注意如果@Autowired UserDao时提示找不到可以尝试以下方法: 方法1:在mapper文件上加@Repository注解,这是从spring2.0新增的一个注解,用于简化 Spring 的开发,实现数据访问 方法2:在mapper文件上加@Component注解,把普通pojo实例化到spring容器中

    Controller层 @RestController @RequestMapping("/user") public class UserController{ @Autowired private UserService userService' @RequestMapping("/query") public User testQuery(){ return userService.selectUserByName("Daisy"); } @RequestMapping("/insert") public List<User> testInsert() { userService.insertService(); return userService.selectAllUser(); } @RequestMapping("/changemoney") public List<User> testchangemoney() { userService.changemoney(); return userService.selectAllUser(); } @RequestMapping("/delete") public String testDelete() { userService.deleteService(3); return "OK"; } ] 启动类 //此注解表示SpringBoot启动类 @SpringBootApplication // 此注解表示动态扫描DAO接口所在包,实际上不加下面这条语句也可以找到 @MapperScan("top.snailclimb.dao") public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }

    XML文件方式

    最新回复(0)