• 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,同时在配置文件中又引入了这个接口
    
  • 相关阅读:
    从原理上理解NodeJS的适用场景
    core 基本操作
    SQL Server 触发器
    Centos 7 Apache .netcore 做转发
    Windows Server 使用 WAMP 并配置 Https
    centos7 apache php git pull
    Visual StudioTools for Unity 使用技巧2
    如何实现Windows Phone代码与Unity相互通信(直接调用)
    关于NGUI与原生2D混用相互遮盖的问题心得
    关于NGUI制作图集在低内存设备上的注意事项
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10453929.html
Copyright © 2020-2023  润新知