整合Mybaties增删改查
1、填写pom.xml
<!-- mybatis依赖jar包 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- web项目依赖jar包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 热部署依赖jar包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <!-- mysql连接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- 阿里巴巴druid数据源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency>
2、填写application.properties
#数据驱动可配也可以不配,因为系统会自动识别 #spring.datasource.driver-class-name =com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8 spring.datasource.username =root spring.datasource.password =root #springboot有自带数据源这个也可不配置 spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
#数据驱动可配也可以不配,因为系统会自动识别 #spring.datasource.driver-class-name =com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8 spring.datasource.username =root spring.datasource.password =root #让控制台打印SQL语句,一般用于本地开发环境 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #springboot有自带数据源这个也可不配置 spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
3、User实体
import java.util.Date; //用户实体 public class User { private int id; private String name; private String phone; private int age; private Date createTime; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } }
4.Springboot主类
import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //@MapperScan会自动扫描里面的包,而且应该是可以自动给每个类装配一个Bean对象 @SpringBootApplication @MapperScan("com.jincou.mapper") public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }
5、UserMapper
import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.jincou.model.User; /** * 功能描述:访问数据库的接口 */ public interface UserMapper { //推荐使用#{}取值,不要用${},因为存在注入的风险 @Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name}, #{phone}, #{createTime},#{age})") @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id") //keyProperty java对象的属性;keyColumn表示数据库的字段 int insert(User user); //column指数据库中的列,property是指实体的属性名,如果一致就不需要写 @Select("SELECT * FROM user") @Results({ @Result(column = "create_time",property = "createTime") }) List<User> getAll(); @Select("SELECT * FROM user WHERE id = #{id}") @Results({ @Result(column = "create_time",property = "createTime") }) User findById(Long id); @Update("UPDATE user SET name=#{name} WHERE id =#{id}") void update(User user); @Delete("DELETE FROM user WHERE id =#{userId}") void delete(Long userId); }
6、UserServise层
import com.jincou.model.User; public interface UserService { //这里只写了个add方法,其它的直接在控制层调用Dao层,正常开发流程都应该写在Service层 public int add(User user); }
7、UserServiseImpl
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.jincou.mapper.UserMapper; import com.jincou.model.User; import com.jincou.service.UserService; @Service public class UserServiceImpl implements UserService{ //因为主类的@MapperScan方法,所以自动为UserMapper装配了一个userMapper对象 @Autowired private UserMapper userMapper; //这里你传过去的时候user的id为null,而insert之后传回回来的user会把数据库中的id值带回来,真强大 @Override public int add(User user) { userMapper.insert(user); int id = user.getId(); return id; } }
8.Controller类
import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.jincou.mapper.UserMapper; import com.jincou.model.JsonData; import com.jincou.model.User; import com.jincou.service.UserService; @RestController @RequestMapping("/api/v1/user") public class UserController { //在UserServiceImpl定义了@Service实现类所以可以得到默认首字母小写的对象 @Autowired private UserService userService; @Autowired private UserMapper userMapper; /** * 功能描述: user 保存接口 */ @GetMapping("add") public Object add(){ User user = new User(); user.setAge(11); user.setCreateTime(new Date()); user.setName("张三"); user.setPhone("1880177"); int id = userService.add(user); return id; } /** * 功能描述:查找全部用户 * 这里和下面是直接调用跳过Servise层,直接到DAO层 */ @GetMapping("findAll") public Object findAll(){ return userMapper.getAll(); } /** * 查找单个用户 */ @GetMapping("find_by_id") public Object findById(long id){ return userMapper.findById(id); } /** * 删除单个用户 */ @GetMapping("del_by_id") public Object delById(long id){ userMapper.delete(id); return ""; } /** *更新用户 */ @GetMapping("update") public Object update(String name,int id){ User user = new User(); user.setName(name); user.setId(id); userMapper.update(user); return ""; } }
测试
1.准备好数据库数据:
#Sql脚本 CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(128) DEFAULT NULL COMMENT '名称', `phone` varchar(16) DEFAULT NULL COMMENT '用户手机号', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `age` int(4) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
2测试结果
插入用户,看后台的sql语句
文献
1、开发mapper:参考语法 http://www.mybatis.org/mybatis-3/zh/java-api.html
2、使用starter, maven仓库地址:http://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter
3、 相关资料:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/#Configuration
4、 整合问题集合: https://my.oschina.net/hxflar1314520/blog/1800035
https://blog.csdn.net/tingxuetage/article/details/80179772
想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。上尉【9】