毕设-使用持久层框架Mybatis
来源:互联网 发布:java 启动事务 编辑:程序博客网 时间:2024/05/17 07:17
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis配置
pom.xml添加依赖
<!-- 配置持久层框架 --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
application.properties添加
#Mybatismybatis.mapper-locations=classpath:mybatis/mapper/*.xmlmybatis.type-aliases-package=com.yongqi.model#打印Mybatis语句logging.level.org.springframework=WARNlogging.level.com.damionew.website.dao=DEBUG#log存放地址#logging.file=D:\websitelog根据mybatis.mapper-locations,在resources下新建mybatis文件夹,在其中存放mapper.xml文件
为了测试,先尝试添加一条记录
之前在数据库中新建了一个表,建表SQL
Create TableCREATE TABLE `family` ( `familyaccount` varchar(50) NOT NULL COMMENT '家庭账号', `familypassword` varchar(50) DEFAULT NULL COMMENT '家庭密码', `familyname` varchar(50) DEFAULT NULL COMMENT '家庭名称', `states` varchar(10) DEFAULT NULL COMMENT '状态', `created_time` varchar(50) DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`familyaccount`)) ENGINE=InnoDB DEFAULT CHARSET=utf8实现添加一条记录到family,先创建一个Family.class的实体类(业务的基础,数据传递的载体)
/** * @Author yinyunqi * @date 2017年12月22日 * @Content Family实体类 */package com.yongqi.model;public class Family { String familyaccount; String familypassword; String familyname; String states; String created_time; public String getFamilyaccount() { return familyaccount; } public void setFamilyaccount(String familyaccount) { this.familyaccount = familyaccount; } public String getFamilypassword() { return familypassword; } public void setFamilypassword(String familypassword) { this.familypassword = familypassword; } public String getFamilyname() { return familyname; } public void setFamilyname(String familyname) { this.familyname = familyname; } public String getStates() { return states; } public void setStates(String states) { this.states = states; } public String getCreated_time() { return created_time; } public void setCreated_time(String created_time) { this.created_time = created_time; } }
想对Family表进行操作,从用户角度来讲,应该是先发出请求,比如 /family/insert
那么需要先找到Controller对应的方法,使用新建一个FamilyController.class
首先这是一个Controller,所以头上要加上@Controller注解
然后要接受/family的请求,所以也要加上@RequestMapping("/family")
下方方法,需要接收的二级请求是 /insert,所以方法前加上@RequestMapping("/insert")
这样处理了请求,知道需要做个插入,就该调用Service服务,所以要自动装配一个FamilyService
FamilyController
/** * @Author yinyunqi * @date 2017年12月22日 * @Content 处理家庭信息 */package com.yongqi.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.yongqi.service.FamilyService;@RequestMapping("/family") //处理 /family 请求@Controller //声明控制器public class FamilyController { @Autowired FamilyService familyService; @ResponseBody //返回JSON字符串,不需要找页面 @RequestMapping("/insert") //处理 /family/insert 请求 public String insertTest() {familyService.insertFamily();return "insert success"; }}
这里调用了FamilyService,需要在这个类中添加insetFamily的方法
为了声明这是个Service,需要在类头加上注解@Service
FamilyService.class进行操作
/** * @Author yinyunqi * @date 2017年12月22日 * @Content 家庭信息处理服务 */package com.yongqi.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.yongqi.mapper.FamilyMapper;import com.yongqi.model.Family;@Servicepublic class FamilyService { @Autowired FamilyMapper familyMapper; public void insertFamily() {//新建一个家庭对象,给该对象赋值Family family = new Family();family.setFamilyname("name");family.setFamilyaccount("account");family.setFamilypassword("password");family.setStates("states");family.setCreated_time("time");familyMapper.insertFamily(family); //将已赋值的家庭对象传递mapper给接口 }}其中调用了familyMapper这个接口,映射到Mapper.xml里
FamilyMapper.interface
/** * @Author yinyunqi * @date 2017年12月22日 * @Content 家庭信息处理持久层接口 */package com.yongqi.mapper;import com.yongqi.model.Family;public interface FamilyMapper { public Family insertFamily(Family family);}
然后就要在项目里面找对应的Mapper了,在application.properties中已经配置了路径
<?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.yongqi.mapper.FamilyMapper"><select id="insertFamily" parameterType="string" resultType="Family">insert into family (familyaccount,familypassword,familyname,states,created_time) values(#{familyaccount},#{familypassword},#{familyname},#{states},#{created_time})</select></mapper>
或者
<?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.yongqi.mapper.FamilyMapper"><insert id="insertFamily" parameterType="string" >insert into family (familyaccount,familypassword,familyname,states,created_time) values(#{familyaccount},#{familypassword},#{familyname},#{states},#{created_time})</insert></mapper>详情参考文档 http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
遇到问题:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familyService': Unsatisfied dependency expressed through field 'familyMapper';
这个时候就应该检查一下配置了,有几个注意点
1、Application.class启动类上应该加上注解@MapperScan("com.yongqi.mapper"),这样才会动态扫描该文件夹下的Mapper
2、application.properties中有一个坑一个注意点
注意点:
mybatis.type-aliases-package=com.yongqi.model别名自动配置吧
坑:
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml这里配置的路径如果是多个,应该需要是平级下,不能有父子关系
比如
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml,classpath:mybatis/*.xml这样就是错误的,会报错Error parsing Mapper XML之类
启动一直报错,一般不是程序问题,大多是配置问题,SpringBoot又是自动配置,除非代码本身有严重的语法错误。
此时Application.class
/** * @Author yinyunqi * @date 2017年12月20日 * @Content 项目的启动引导类,Spring的主要配置类 */package com.yongqi;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;import org.springframework.web.servlet.config.annotation.EnableWebMvc;//开启组件扫描和自动配置,包括://@Configuration标明该类使用Spring基于Java的配置//@ComponentScan启动组件扫描,这样写的web控制器类和其他组件才能被自动发现并注册为Spring应用程序的上下文Bean,比如@Controller,@Service//@EnableAutoConfiguration开启了SpringBoot自动配置//@EnableWebMvc@ServletComponentScan //开启自动扫描servlet和filter,此时可以自定义servlet和filter@SpringBootApplication @MapperScan("com.yongqi.mapper") //开启自动扫描Mapperpublic class Application { public static void main(String[] args) {SpringApplication.run(Application.class, args); //引导启动应用程序 }}此时项目结构
然后浏览器 http://localhost:8080/family/insert 稳稳的成功
数据库中
成功。又到周末了,躺在被窝给考研的老铁们加油。。
- 毕设-使用持久层框架Mybatis
- MyBatis持久层框架使用总结
- 持久层框架---MyBatis
- 持久层框架--mybatis
- MyBatis 持久层框架
- 持久层框架之MyBatis
- spring整合使用持久层框架mybatis(二)
- Java数据持久层框架 MyBatis
- J2EE持久层框架mybatis配置文件写法
- J2EE持久层框架mybatis配置文件写法
- Mybatis持久层框架(详细讲解)
- 持久层框架:Mybatis快速入门
- 使用mybatis+SQLServer做持久层入门
- Tomcat服务器+MySQL数据库+MyBatis持久层框架的简单使用
- spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架
- SpringMV框架 使用hibernate做持久层
- Mybatis持久层构架
- Mybatis持久层配置
- n阶汉诺塔的递归算法
- 线性代数 03.05 矩阵的初等变换与线性方程组 习题课
- 物理地址=段地址向左移1个16进制位+偏移量
- 107. Binary Tree Level Order Traversal II
- 在Android Studio中使用Git
- 毕设-使用持久层框架Mybatis
- 学习12
- java eclipse调试提示Source not found 或 一闪而过 解决方法
- 20171222Capstone训练营
- 解决Url带中文参数乱码问题
- React Native手动打包生成index.bundle.js文件
- bootstrap笔记
- Java UDP网络编程
- LeetCode 257. Binary Tree Paths