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,同时在配置文件中又引入了这个接口
原文地址:https://www.cnblogs.com/tengpengfei/p/10453929.html