Mybatis之增删改查

MyBatis为JAVA的一种持久层框架(或者说是ORM框架),另一种ORM框架为Hibernate;说是MyBatis是半自动化的ORM框架,Hibernate是全自动的ORM框架。刚开始先用起来,理论先别管太多。

该教程参考自:一号门MyBatis从入门到精通

http://limingnihao.iteye.com/blog/781671

http://blog.csdn.net/chris_mao/article/details/48803545

需要添加的JAR包:
mybatis-3.4.1.jar(下载地址:https://github.com/mybatis/mybatis-3/releases)
mysql-connector-java-5.1.40-bin.jar(这里用的MySQL数据库)

1. 用户表:sys_user1;

CREATE TABLE `sys_user1` (
  `id` INT(11) PRIMARY KEY AUTO_INCREMENT,
  `userName` VARCHAR(50),
  `birthday` DATE,
  `salary` DECIMAL(8,2),
  `address` VARCHAR(200)
) ENGINE=INNODB CHARSET=utf8;
INSERT INTO `sys_user1` VALUES(1, '陈三', '1992-02-29', 123456.78, '深圳市南山区');
INSERT INTO `sys_user1` VALUES(2, '张三', '1990-03-05', 8500, '深圳市宝安区');
INSERT INTO `sys_user1` VALUES(3, '李三', '1991-05-23', 123326.1, '深圳市福田区');
INSERT INTO `sys_user1` VALUES(4, '赵四', '1988-09-15', 8000, '深圳市龙华新区');

2. 实体类:SysUser1

public class SysUser1 {
	private int id;
	private String userName;
	private Date birthday;
	private Double salary;
	private String address;
	
	public String toString(){
		return "SysUser1 : {id = " + id + ", userName = " + userName + ", birthday = " + birthday + ", salary = " + salary + ", address = " + address + "}";
	}
	
	//省略属性的setter、getter方法
}
3. 实体类SysUser1的映射文件SysUser1.xml





  
  
    insert into `sys_user1`(userName, birthday, salary, address) 
    values(#{userName}, #{birthday}, #{salary}, #{address})
  

  
  
    delete from `sys_user1` where id=#{id}
  
  
  
  
    update `sys_user1` set userName=#{userName} 
    where id=#{id}
  
  
  
  
  
  
  
  
  
  

4. myBatis配置文件myBatisConfig.xml





  
  
    
  
  
  
  
	
	  
	  
	  
	  
		
        
        
        
	  
	
  

  
  
    
  

5. 测试类MyBatisSysUser1Test

public class MyBatisSysUser1Test {
	private static SqlSessionFactory sqlSessionFactory;
    private static Reader resource;
    
    //创建会话工厂
    static{
        try{
        	//读取MyBatis配置文件
        	resource = Resources.getResourceAsReader("myBatisConfig.xml");
        	//创建SqlSessionFactory会话工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public static SqlSessionFactory getSession(){
        return sqlSessionFactory;
    }
    
    //插入一条数据
    public void insert(){
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	SysUser1 sysUser1 = new SysUser1();
    	sysUser1.setUserName("王二");
    	DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    	try {
    		sysUser1.setBirthday(df.parse("1988-08-23"));
    	} catch (ParseException e) {
    	    e.printStackTrace();
    	}
    	sysUser1.setSalary(7800.00);
    	sysUser1.setAddress("深圳市罗湖区");
    	sqlSession.insert("com.chensan.sys.entity.SysUser1.insert", sysUser1);
    	sqlSession.commit();//新增、修改、删除需要提交
    	sqlSession.close();
    	System.out.println(sysUser1);
    }
    
    //删除一条记录
    public void delete(){
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	sqlSession.delete("com.chensan.sys.entity.SysUser1.delete", 4);
    	sqlSession.commit();
    	sqlSession.close();
    }
    
    //更新用户记录
    public void update(){
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	SysUser1 sysUser1 = new SysUser1();
    	sysUser1.setId(5);
    	sysUser1.setUserName("王二小");
    	sqlSession.update("com.chensan.sys.entity.SysUser1.update", sysUser1);
    	sqlSession.commit();
    	sqlSession.close();
    	System.out.println(sysUser1);
    }
    
    public void getById(){
    	//开启会话实例sqlSession
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	SysUser1 sysUser1 = sqlSession.selectOne("com.chensan.sys.entity.SysUser1.getById",1);
    	sqlSession.close();//关闭会话
    	System.out.println(sysUser1);
    }
    
    //根据其它字段查询记录
    public void getByName(){
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	List sysUser1 = sqlSession.selectList("com.chensan.sys.entity.SysUser1.getByName","三");
    	sqlSession.close();
    	for(SysUser1 user : sysUser1){
    		System.out.println(user);
    	}
    }
    
    //查询所有用户记录
    public void getAll(){
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	List sysUser1 = sqlSession.selectList("com.chensan.sys.entity.SysUser1.getAll");
    	sqlSession.close();
    	for(SysUser1 user : sysUser1){
    		System.out.println(user);
    	}
    }
    
    public static void main(String[] args) {
    	MyBatisSysUser1Test myBatisSysUser1Test = new MyBatisSysUser1Test();
    	//myBatisSysUser1Test.insert();
    	//myBatisSysUser1Test.delete();
    	//myBatisSysUser1Test.update();
    	//myBatisSysUser1Test.getById();
    	//myBatisSysUser1Test.getByName();
    	myBatisSysUser1Test.getAll();
    } 
}
注意点:

1)mapper元素的namespace属性,用来区分映射对应的实体类,绑定Dao接口,即面向接口编程。可用全限定名,直接找对对应的操作实体;也可用唯一名称标识来表示,在工程中唯一即可。

2)#{} 是一个占位符,通过#{}可实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止注入。#{}可以接收简单类型值或者pojo属性值。
${}表示拼接sql串,通过${}可以将preparedStatement传入的内容拼接在sql中,且不进行jdbc类型转换,${}可以接收简单类型值或者pojo属性值,如果parameterType传输单个简单类型,${}括号中只能是value。

3)在类映射文件的insert操作中属性useGeneratedKeys(默认为false)允许 JDBC 支持自动生成主键,必须驱动兼容(如:MySQL和SQLServer;Oracle只能依赖于sequence来实现自增长不支持该属性)。在useGeneratedKeys="true"时,keyProperty必须绑定主键对应的字段;(不过即使不用useGeneratedKeys="true",MySQL5.6只要在数据表中设置了auto_increment,仍能实现自增长,只是这个自增长是数据库自身的,而useGeneratedKeys是使用jdbc的getGenereatedKeys方法获取主键并赋值到keyProperty设置的属性)。在插入时,如果不同时设置useGeneratedKeys="true"和keyProperty属性,返回的插入数据SysUser1 : {id = 0, userName = 王二, birthday = Tue Aug 23 00:00:00 CDT 1988, salary = 7800.0, address = 深圳市罗湖区} 的id=0;因为这时的主键并不是由jdbc去生成,而此时的数据也仅是当前操作的对象,并非从数据库获取。

4)在MyBatis的配置文件myBatisConfig.xml中,typeAliases中加上typeAliase可对实体取别名,在实体的映射文件中parameterType或者resultType就可直接使用该实体类的别名;当然如果实体类映射中使用resultMap(设置实体类属性和数据表字段对应关系)后,resultMap的id属性即相当于实体类的别名,在该映射文件的parameterType和resultType中也可直接使用该简写(只作用于本映射文件内)。

还有批量新增、批量删除的例子没写;

你可能感兴趣的:(MyBatis)