建表语句
CREATE TABLE `user` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`uname` varchar(100) NOT NULL,
`pwd` varchar(100) NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
配置文件
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
- User.java
注解是给 jpa 用的,提前写上了
package cn.go.pojo;
import javax.persistence.*;
@Entity(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer uid;
@Column(name = "uname")
private String name;
@Column(name = "pwd")
private String pwd;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
mybatis
- pom
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
<!-- mysql 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<!-- 注意版本否则 @Select 会报错 -->
<version>1.3.2</version>
</dependency>
- mapper
package cn.go.mapper;
import cn.go.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper {
@Select("SELECT * FROM USER WHERE UNAME = #{name}")
List<User> findByName(@Param("name") String name);
@Insert("INSERT INTO USER(UNAME, PWD) VALUES(#{name}, #{pwd})")
int insert(@Param("name") String name, @Param("pwd") String pwd);
}
- service
package cn.go.service;
import cn.go.pojo.User;
import java.util.List;
import java.util.Optional;
public interface UserService {
List<User> query(String name);
int addMybatis(String name, String pwd);
}
- serviceImpl
package cn.go.service.impl;
import cn.go.mapper.UserMapper;
import cn.go.pojo.User;
import cn.go.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> query(String name) {
List<User> byName = userMapper.findByName(name);
return byName;
}
@Override
public int addMybatis(String name, String pwd) {
int insert = userMapper.insert(name, pwd);
return insert;
}
}
- Controller
package cn.go.controller;
import cn.go.pojo.User;
import cn.go.service.UserService;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/com")
public class ComController {
@Autowired
private UserService userService;
@RequestMapping("/addUser")
public String addUser(String name, String pwd){
int i = userService.addMybatis(name, pwd);
return String.valueOf(i);
}
@RequestMapping("/mybatisFind")
public String mybatisFind(String name){
List<User> query = userService.query(name);
return JSON.toJSONString(query);
}
}
- 启动类
package cn.go;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("cn.go.mapper")
@SpringBootApplication
public class HelloAppRun {
public static void main(String[] args) {
SpringApplication.run(HelloAppRun.class, args);
}
}
JdbcTemplate
- pom
<!-- jdbcTemplate 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
- service
package cn.go.service;
import cn.go.pojo.User;
import java.util.List;
import java.util.Optional;
public interface UserService {
void createUser(String name, String pwd);
}
- serviceImpl
package cn.go.service.impl;
import cn.go.pojo.User;
import cn.go.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void createUser(String name, String pwd) {
jdbcTemplate.update("insert into user values(null,?,?);", name, pwd);
}
}
- controller
package cn.go.controller;
import cn.go.pojo.User;
import cn.go.service.UserService;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/com")
public class ComController {
@Autowired
private UserService userService;
@RequestMapping("/addUser")
public String addUser(String name, String pwd){
userService.createUser(name,pwd);
return "OK";
}
}
spring-jpa
- pom
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
- dao
package cn.go.dao;
import cn.go.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserDao extends JpaRepository<User, Integer> {
}
- service
package cn.go.service;
import cn.go.pojo.User;
import java.util.List;
import java.util.Optional;
public interface UserService {
List<User> jpaFind(String name);
Optional<User> jpaFindOne(Integer id);
}
- serviceImpl
package cn.go.service.impl;
import cn.go.dao.UserDao;
import cn.go.pojo.User;
import cn.go.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public List<User> jpaFind(String name){
User user = new User();
user.setName(name);
Example<User> example = Example.of(user);
List<User> users = userDao.findAll(example);
return users;
}
public Optional<User> jpaFindOne(Integer id){
Optional<User> byId = userDao.findById(id);
return byId;
}
}
- controller
package cn.go.controller;
import cn.go.pojo.User;
import cn.go.service.UserService;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/com")
public class ComController {
@Autowired
private UserService userService;
@RequestMapping("/jpaFind")
public String jpaFind(String name){
List<User> query = userService.query(name);
return JSON.toJSONString(query);
}
@RequestMapping("/jpaFindById")
public String jpaFind(Integer id){
Optional<User> user = userService.jpaFindOne(id);
return JSON.toJSONString(user);
}
}
报错
控制台有类似下面的输入
2019-11-17 16:44:11.476 INFO 11040 — [nio-8080-exec-2] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
2019-11-17 16:44:11.521 INFO 11040 — [nio-8080-exec-2] o.s.jdbc.support.SQLErrorCodesFactory : SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
可以检查是不是sql中表名或者字段写错了,或者配置文件打开debug级别的sql,查看sql。配置如下:
logging:
level:
cn:
go:
mapper : debug