Mybatis_3.基于注解的增删改查
1.实体类User.java
public class User {
private int id;
private String name;
private int age;
//getter、setter...
}
2.接口类UserMapper.java
public interface UserMapper {
//添加
@Insert("insert into users (name,age) values (#{name},#{age})")
public int addUser(User user) throws Exception;
//删除
@Delete("delete from users where id = #{id}")
public void deleteUser(int id) throws Exception;
//修改
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public void updateUser(User user) throws Exception;
//查询
@Select("select * from users where id = #{id}")
public User queryUser(int id) throws Exception;
//查询所有的用户
@Select("select * from users")
public List<User> queryAllUser() throws Exception;
}
3.全局配置文件mybatis.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 映入外部配置文件 -->
<properties resource="mysql.properties"></properties>
<!-- 配置mybatis运行环境,development:开发模式,work:工作模式-->
<environments default="development">
<environment id="development">
<!-- type=“jdbc”表示使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了三种数据源类型,POOLED,UNPOOLED,JNDI -->
<!-- POOLED:表示支持JDBC数据源的连接池 -->
<!-- UNPOOLED:表示不支持JDBC数据源的连接池 -->
<!-- JNDI:表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 基于注解的增删改查,注册接口,注意Mapper标签的属性为class,引入xml文件是resource -->
<mapper class="com.test.withAnno.UserMapper"/>
</mappers>
<!-- 为实体类定义别名,简化sql映射xml文件中的引用 -->
<!-- <typeAliases>
<typeAlias type="com.test.bean.User" alias="_User"/>
</typeAliases> -->
</configuration>
4.数据库配置文件mysql.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis1?useUincode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
5.测试类
/**
* @author:滕鹏飞
* @version: 1.0
* @Created on: 2018-9-2 下午9:05:14
* 类说明
*/
public class Test {
public static void main(String[] args) {
addUser();
//deleteUser();
//updateUser();
//queryUser();
//queryAllUser();
}
//添加
public static void addUser() {
SqlSession session = DBUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User u = new User("张三",21);
try {
mapper.addUser(u);
session.commit();
System.out.println(u.toString());
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
session.close();
}
}
//删除
public static void deleteUser() {
SqlSession session = DBUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
try {
mapper.deleteUser(2);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
session.close();
}
}
//修改
public static void updateUser() {
SqlSession session = DBUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
try {
User user = new User(3,"Tom",24);
mapper.updateUser(user);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
session.close();
}
}
//查询
public static void queryUser() {
SqlSession session = DBUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
try {
User user = mapper.queryUser(4);
session.commit();
System.out.println(user.toString());
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
session.close();
}
}
//查询所有
public static void queryAllUser() {
SqlSession session = DBUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
try {
List<User> users = mapper.queryAllUser();
session.commit();
System.out.println(users);
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
session.close();
}
}
}
6.注意:
注解和XML文件的差别不大,注意配置文件中引入是的属性
异常问题
1.Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。
原因:为mybatis.cfg.xml里注册UserMapper.xml文件时,路径错误
2.Cause: org.xml.sax.SAXParseException; lineNumber: 27; columnNumber: 40; 需要属性 "name", 并且必须为元素类型 "package" 指定该属性。
原因:在配置文件中引入映射文件,忘记将接口类引入到配置文件中,所以新手的话需要按照教程一步一来
3.Caused by: org.xml.sax.SAXParseException; lineNumber: 29; columnNumber: 13; 与元素类型 "id" 相关联的属性 "{1}" 应有左引号。
原因:映射文件29行少一个左引号
4.Type interface com.test.mapper.UserMapper is already known to the MapperRegistry.
原因:在映射文件的节点<mapper>中配置了的namespace,同时在配置文件中又引入了这个接口
Mybatis_3.基于注解的增删改查的更多相关文章
- ASP.NET Web API基于OData的增删改查,以及处理实体间关系
本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先是比较典型的一对多关系,Supplier和Product. public class Product { ...
- [转]ASP.NET Web API基于OData的增删改查,以及处理实体间关系
本文转自:http://www.cnblogs.com/darrenji/p/4926334.html 本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先 ...
- Spring Boot 使用Mybatis注解开发增删改查
使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
- Mybatis_2.基于XML的增删改查
1.实体类User.java public class User { private int id; private String name; private int age; //getter.se ...
- SpringBoot+MyBatis中自动根据@Table注解和@Column注解生成增删改查逻辑
习惯使用jpa操作对象的方式,现在用mybatis有点不习惯. 其实是懒得写SQL,增删改查那么简单的事情你帮我做了呗,mybatis:NO. 没办法,自己搞喽! 这里主要是实现了通过代码自动生成my ...
- 基于django做增删改查组件,分页器组件
增删改查组件 一.Djangoadmin的启发 二.基于Djangoadmin实现数据的增删改查 分页器组件 分页器组件的介绍以及源码解读 补充:源码下载,
- CRM基于.NET的增删改查
一.准备工作: 1.添加 microsoft.crm.sdk.proxy.dll和microsoft.xrm.sdk.dll 引用到项目中!并引用以下using! using Microsoft.Xr ...
- RESTful最佳实践之基于 jersey 的增删改查
jersey-rest-demo 增删改查 项目地址:https://github.com/CoderDream/jersey-rest-demo 源代码:http://download.csdn.n ...
随机推荐
- django - 总结 - ORM性能
QuerySet 1.惰性查询 2.缓存机制 3.可迭代 4.可切片 -------------------------------------------------------在一个新创建的查询集 ...
- [物理学与PDEs]第1章习题13 静磁场的矢势在媒质交界面上的条件
试讨论对静磁场的矢势, 如何决定其在媒质交界面上的条件. 解答: 由 $\rot{\bf A}={\bf B}$ 知 $$\bex \oint_l {\bf A}\cdot\rd {\bf l} =\ ...
- CSS+HTML+JQuery实现条形图
在工作中遇到了写条形图的情况,因为文字,条形数量和条形图的颜色需要改变,所以不能用图片,所以决定写一个试试,写的比较简单,但毕竟是第一次,也遇到了一些问题,特意记录下来,以免忘记. 因为该页面还需要兼 ...
- 【Java】Java随手记
System.out.printf() : System.out.printf("%d",x); 输出整数 System.out.printf(&quo ...
- 封装ajax,让调用变得简单优化
思考一下: 通常我们在使用ajax来发送接口请求时,每一次都会调用ajax固定的元素,比如data.url.method.success.error等.那么我们想一下能不能先把ajax封装起来,在每次 ...
- 项目改bug期间总结
kotlin中使用labda 表到时注意参数,另外setOnClickListener() 和 setOnClickListener{} 差别很大的,使用要细心, 因为这个问题拿了大半天闷, 最后还是 ...
- css :root 选择器
:root css 伪类匹配文档的根元素. 对于 HTML 来说, :root 表示<html>元素,除了优先级更高之外,与 html 选择器相同. 在声明全局 css 变量时 :root ...
- sass 工具库
github : https://github.com/uustoboy/base_mixins ( 有坑慎用 ) 项目截图: _base_mixins.scss 混合宏的引入文件; _setting ...
- java第一个demo(简单登陆窗体)
首先新建一个Maven项目 选择一个存放项目的目录 ,点击完成(下图). 为了防止jdk版本的问题,所以在pom.xml里面做一个配置,让整个项目统一用jdk 1.8版本(1.7之前可能会存在一些问题 ...
- pl/sql学习(6): 引号/程序调试/列中的字符串合并/正则表达式
有关自治事务的问题: https://www.cnblogs.com/princessd8251/p/4132649.html 我在plsql development学习中遇到的常见问题: (一) 引 ...