SpringBoot+mysql学习项目(一)

创建项目:file-->new -->project --->next-->填写包名、项目名-->选择相应的模块和版本-->完成

在生成的pom.xml文件中导入需要的依赖,直接在Maven官网拿。

一、使用jdbcTmplate

         是SpringJDBC的封装,旨在使JDBC更加易于使用。并且JdbcTemplate处理了资源的建立和释放。需要配置数据源,但是spring boot已经自动帮我们初始化好了jdbcTemplate对象,并且默认采用tomcat数据源dataSource

 这是所需要的依赖,mysql-connector-java不要使用过高版本,容易出问题。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

在里面我使用了lombok,lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具 。效果看后面实体类。如果想要使用lombok,还需要安装一个插件。file-->Setttings-Plugins

接下来就是配置数据源,在application.properties或者新建一个application.yml中。我是在.yml文件中,看起来有层次感。

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot
    username: root
    password: root

 数据库建表

 建立对应实体类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author Administrator
 * @description $
 * @date 2019/12/25
 */
@Data   //包含了get,set和toString
@AllArgsConstructor  //生成一个有参构造器
@NoArgsConstructor  //生成一个无参构造器
public class User {
    private Integer userId;
    private String userName;
    private String passWord;
    private String address;
}

dao层(一个接口,一个实现类)

import java.util.List;

public interface UserDaoI {
    public List<User> findAll();
    public User findById(Integer userId);
    public boolean addUser(User user);  
    public boolean deleteById(Integer userId);
    public boolean updateById(Integer userId,String userName);
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author Administrator
 * @description $
 * @date 2019/12/25
 */
@Repository("userDao")
public class UserDaoImpl implements UserDaoI {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
   /**
    * 功能描述:查询所有数据
    * @Param: []
    * @Return: java.util.List<com.example.pojo.User>
    * @Author: Administrator
    * @Date: 2019/12/25 17:50
    */
    @Override
    public List<User> findAll() {
        String sql = "SELECT userId,userName,passWord,address from User";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
    }
    /**
     * 功能描述: 由userId查询数据
     * @Param: [userId]
     * @Return: com.example.pojo.User
     * @Author: Administrator
     * @Date: 2019/12/25 17:50
     */
    @Override
    public User findById(Integer userId) {
        String sql = "select userId,userName,passWord,address from User where userId=?";
        Object[] params = {userId};
        return jdbcTemplate.queryForObject(sql,params,new BeanPropertyRowMapper<User>(User.class));
    }
    /**
     * 功能描述: 添加数据
     * @Param: [user]
     * @Return: boolean
     * @Author: Administrator
     * @Date: 2019/12/25 17:51
     */
    @Override
    public boolean addUser(User user) {
        String sql = "insert into User(userName,passWord,address)values(?,?,?)";
        Object[] params = {user.getUserName(),user.getPassWord(),user.getAddress()};
        return jdbcTemplate.update(sql,params)>0;
    }

    /**
     * 功能描述: 由userId删除数据
     * @Param: [userId]
     * @Return: boolean
     * @Author: Administrator
     * @Date: 2019/12/25 17:51
     */
    @Override
    public boolean deleteById(Integer userId) {
        String sql = "delete from User where userId=?";
        Object[] params = {userId};
        return jdbcTemplate.update(sql,params)>0;
    }
    /**
     * 功能描述:由userId修改数据
     * @Param: [userId, userName]
     * @Return: boolean
     * @Author: Administrator
     * @Date: 2019/12/25 17:51
     */
    @Override
    public boolean updateById(Integer userId,String userName) {
        String sql = "update User set userName=? where userId=?";
        Object[] params = {userName,userId};
        return jdbcTemplate.update(sql,params)>0;
    }

}

service层

mport org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author Administrator
 * @description $
 * @date 2019/12/25
 */
@Service("userService")
public class UserService {
    @Autowired
    @Qualifier("userDao")
    private UserDaoI userDaoI;
    /**
     * 功能描述: <br>
     * 〈〉
     * @Param: []
     * @Return: java.util.List<com.example.pojo.User>
     * @Author: Administrator
     * @Date: 2019/12/25 16:10
     */
    public List<User> findAll(){
        List<User> list = userDaoI.findAll();
        return list;
    }
    
    /**
     * 功能描述: <br>
     * 〈〉
     * @Param: [userId]
     * @Return: com.example.pojo.User
     * @Author: Administrator
     * @Date: 2019/12/25 16:16
     */
    public User findById(Integer userId){
     return userDaoI.findById(userId);
    }

    /**
     * 功能描述: <br>
     * 〈〉
     * @Param: [user]
     * @Return: boolean
     * @Author: Administrator
     * @Date: 2019/12/25 16:26
     */
  
    public boolean add(User user){
        return userDaoI.addUser(user);
    }
   
 
    public boolean deleteById(Integer userId){
        return  userDaoI.deleteById(userId);
    }
    
    public boolean update(Integer userId,String userName){
       return userDaoI.updateById(userId,userName);
    }

}

Controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * @author Administrator
 * @description $
 * @date 2019/12/25
 */
@Controller
public class UserController {
    @Autowired
    @Qualifier("userService")
    private UserService service;

    @RequestMapping(value = "/all",method = RequestMethod.GET)
    @ResponseBody
    public String findAll(){
        List<User> list = service.findAll();
        for (User user : list) {
            System.out.println(user.getUserId()+" "+user.getUserName());
        }
        return "查询所有!";
    }
    @ResponseBody
    @RequestMapping(value = "/this",method = RequestMethod.GET)
    public String findById(Integer userId){
        User user = new User();
        user = service.findById(userId);
        System.out.println(user.getUserId()+" "+user.getUserName());
        return  "传参查询";
    }
    @ResponseBody
    @RequestMapping(value = "add",method = RequestMethod.GET)
    public String add(User user){//@ModelAttribute("user") User user
        System.out.println(user.getPassWord()+"接收参数.....");
        boolean flag = service.add(user);
        System.out.println("......"+flag+".....");
        return "添加";
    }
 
    @ResponseBody
    @RequestMapping(value = "/del",method = RequestMethod.GET)
    public String deleteById(Integer userId){
        boolean flag = service.deleteById(userId);
        System.out.println(flag);
        return "根据id删除";
    }
    @ResponseBody
    @RequestMapping(value = "/update",method = RequestMethod.GET)
    public String update(Integer userId,String userName){
        System.out.println(service.findById(userId).getUserName());
        System.out.println(service.update(userId,userName));
        System.out.println(service.findById(userId).getUserName());
        return "修改数据";
    }

}

 现在就可以进行测试了,在浏览器地址栏输入:localhost:8080/all   看后台是否打印出表中数据(前提是表中有数据),如果想修改端口号8080,可以在属性文件中配置:server.port=8081。将8080改为8081

在我进行测试的时候顺便试了试不同的接收参数方式,一共有如下几种,有兴趣可以试一试

1.通过实体Bean接收请求参数   
    public String login(Student stu, Model model)
2.通过方法的参数接收   
    public String login(String name, String password, Model model)
3.通过HttpServletRequest接收请求参数 
    public String login(HttpServletRequest req,Model model)
4.通过@PathVariable接收URL中的请求参数  
    public String test4(@PathVariable String name)
5.通过@RequestParam接收请求参数 
    public String test5(@RequestParam String name,@RequestParam String passwd)
6.通过@ModelAttribute接收请求参数  
    public String test6(@ModelAttribute("stu") Student stu)

 在上面的代码中,明显没有事务管理,可以使用注解@Transactional

使用方法:在application类添加注解:@EnableTransactionManagement(开启支持事务),然后在相应的方法或类上注解@Transactional,就这么简单。

service层从新写一个测试方法

    @Transactional
    public void addTest(User user){
        System.out.println("........>");
        userDaoI.addTest(user);
        System.out.println("<........");
       throw new RuntimeException("exception");
    }

但是,默认的只对RuntimeException异常回滚,所以还需要通过属性进行设置。

指定回滚   @Transactional(rollbackFor=Exception.class)      指定不回滚  @Transactional(noRollbackFor=Exception.class)

还有一些其他属性:propagation 、isolation、 readOnly 、tlmeoUt 、roIlbackFor 、rollbackForClassName 、noRollbackFor noRollbackForClassName 这些属性的具体作用就不一一说了。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值