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 ...
随机推荐
- Sass学习第一天
Sass学习 网站学习地址: Sass中文网:https://www.sass.hk/docs/#t7-3 Airen的博客:https://www.w3cplus.com/preprocessor/ ...
- 第十三节:HttpHander扩展及应用(自定义扩展名、图片防盗链)
一. 自定义扩展名 1. 前言 凡是实现了IHttpHandler接口的类均为Handler类,HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
- SHAREDPOOL使用率的监控部署及思考
[系统环境]: 系统环境:Sun Solaris10 U11 + ORACLE 11.2.0.4.0 RAC [背景描述]: 从2016年11月起,生产的数据库期的出现了两次m0001进程12 ...
- 2.5 elif
elif 想一想: if能完成当xxx时做事情 if-else能完成当xxx时做事情1,否则做事情2 如果有这样一种情况:当xxx1满足时做事情1:当xxx1不满足.xxx2满足时做事情2:当xxx2 ...
- Mockito框架入门教程(二)
接上一篇,继续学习其它的.... 8.找出冗余的互动(即未被验证到的) @Test(expected = NoInteractionsWanted.class) public void find_re ...
- php curl使用
- C/C++的20个位运算技巧
一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读&l ...
- Eclipse安装git插件以及关联导入GitHub项目
一.Eclipse配置git 1.查看自己eclipse的版本 打开eclipse 导航: help->AboutEclipse 如图: 2.检查Eclipse中是否已安装Git插件 菜单栏He ...
- sort排序用法
Python] sorted函数 我们需要对List.Dict进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(任务管理系统)-2项目搭建
系统要求 首先建议采用 Windows 10 专业版/企业版/教育版,且必须是64位操作系统,原因是docker装起来比较方便,Win7装起来比较麻烦,且不确定是否有其他问题(自己没有实践过) 其次W ...