mybatis学习入门使用注解增删改查(二)

来源:互联网 发布:python博客 编辑:程序博客网 时间:2024/06/06 01:00

1:User

package com.mybatis.domain;
//users表所对应的实体类
public class User {
//实体类的属性和表的字段名称一一对应
private Integer id;
private String name;
private Integer age;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public User(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}


2:UserMapper

package com.mybatis.dao;


import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;


import com.mybatis.domain.User;
//不需要编写接口的映射文件,直接使用注解
public interface UserMapperAnnotation {
@Select("select id,name,age from users where id= #{id}")
public User getUserById(Integer id);
@Insert("insert into users(name,age) values(#{name},#{age})")
public void addUser(User user);
@Delete("delete from users where id=#{id}")
public void deleteUserById(Integer id);
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public void updateUser(User user);
@Select("select id,name,age from users")
public List<User> getAllUsers();
}


3:mybatis-config.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>
<!-- 
mybatis可以使用properties标签引用外部属性文件(数据源)
resource:引用类路径下文件位置
url:引用:磁盘上的路径下文件位置
-->
<properties resource="dbconfig.properties"></properties>
<!-- 
settings包含很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
-->
<settings>
<!-- 是否开启驼峰命名:自动将数据表字段名dept_id与JavaBean的属性名deptId对应 -->
<setting name="mapUnderscoreToCamelCase" value="true"/> 
<!-- 由于mybati默认:jdbcTypeForNull=OTHER ,可以设置为NULL-->
<setting name="jdbcTypeForNull" value="NULL"/> 
<!-- 懒加载(延迟加载) 开启懒加载,使用时再加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 立即加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<typeAliases>
<!--  typeAliases:给Java类起别名,避免包.类名太繁琐(别名不区分大小写)
  type:指定要起别名的类的全类名;默认别名是类名小写
  alias:指定新的全类名
 -->
   <!-- <typeAlias alias="employee" type="com.mybatis.bean.Employee"/> -->
  <!-- package:批量起别名
      name为某个包下的所有类以及子包起一个别名,默认别名:类名小写 
      在批量起别名的情况下:为了避免包以及子包下的类冲突,可以直接在类上使用注解Alias(emp)起别名
  建议:不起别名,resultType:直接使用全类名(包.类名)
  -->
  <package name="com.mybatis.bean"></package>
 </typeAliases>
 <!-- environments:mybatis可以配置多种环境
    environment:配置一个具体的环境
    transactionManage type:事务管理器的类型两种:JDBC(JDBC启动),MANAGER(服务器启动)
    dataSource type:UNPOOLED(不使用数据库连接池),POOLED(使用数据库连接池),JDNI
  -->
<environments default="development">   
 <environment id="development">
    <transactionManager type="JDBC"/> 
    <!-- 数据源 -->     
    <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> 
<!-- mybatis支持多个数据库厂商 :type:得到数据库厂商的表示-->
<databaseIdProvider type="DB_VENDOR">  
<!-- 为不同数据库厂商起别名  -->
<property name="MySQL" value="mysql"/>
<property name="SQL Server" value="sqlserver"/>
   <property name="DB2" value="db2"/>
   <property name="Oracle" value="oracle"/> 
 </databaseIdProvider>
    <mappers>    
    <!--  将写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中-->
      <!-- mapper:注册一个sql映射
        resource:引用类路径的sql映射文件
        uri:应用网络路径或磁盘路径下的路径
        一般开发时:配置文件:写在包路径下 mybatis/mapper/EmployeeMapper.xml
        class:注册接口的路径:包.类名(sql映射文件必须与接口同名,并且放在与接口同一目录下)
        class属性还可以:mybatis:可以不用写配置文件,所有sql语句直接在类中方法上使用注解方式(参数为sql语句)
       @Select,@Insert,@Update,@Delete
        但是:建议
        比较重要的:复杂的Dao接口:使用sql映射置文件
        不重要的,简单的Dao接口为了快速开发可以使用注解
       -->
     <!--  <mapper resource="mybatis/mapper/EmployeeMapper.xml"/> 
      <mapper class="com.mybatis.dao.EmployeeMapperAnnotation"/> -->
      <!-- package批量注册 :-注册某个包下的所有类以及子类,要求类映射的sql文件与类在同一个包下  -->
      <package name="com.mybatis.dao"/>
    </mappers> 
</configuration>


4:TestMybatisAnnotation

package com.mybatis.test;


import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.mybatis.dao.UserMapperAnnotation;
import com.mybatis.domain.User;
public class TestMybatisAnnotation {


public SqlSessionFactory getSqlSessionFactory() throws IOException{
String resource = "mybatis-config.xml"; 
InputStream inputStream = Resources.getResourceAsStream(resource); 
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}
/**
* 1:根据xml配置(全局配置文件)文件创建一个SqlSessionFactory对象
* 2:sql映射文件,配置了每一个sql,已经sql的封装规则,
* 3:将sql映射文件注册到全局配置文件中
* 4:通过全局配置文件得到SqlSessionFactory
* SqlSessionFactory中获取一个Session实例对象,能够直接执行已经映射的sql语句进行CRUD
* 一个SqlSessionFactory代表了与数据库的一次会话,用完关闭
* @throws IOException
*/
//接口式编程
@Test
public void testSelect() throws IOException{
SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
SqlSession session=sqlSessionFactory.openSession();
//获取接口的实现类对象:session.getMapper(接口.class)
//将一个接口与一个xml配置文件进行绑定,mybatis会自动为接口创建一个代理类对象
//代理类对象去执行CRUD操作
try {
UserMapperAnnotation mapper=session.getMapper(UserMapperAnnotation.class);
User user=mapper.getUserById(1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}
@Test
public void testInsert() throws IOException{
SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
SqlSession session=sqlSessionFactory.openSession();
//获取接口的实现类对象:session.getMapper(接口.class)
//将一个接口与一个xml配置文件进行绑定,mybatis会自动为接口创建一个代理类对象
//代理类对象去执行CRUD操作
try {
UserMapperAnnotation mapper=session.getMapper(UserMapperAnnotation.class);
User user=new User("SpringMVC",8);
mapper.addUser(user);
session.commit();//需要手动提交
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}
@Test
public void testUpdate() throws IOException{
SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
SqlSession session=sqlSessionFactory.openSession();
//获取接口的实现类对象:session.getMapper(接口.class)
//将一个接口与一个xml配置文件进行绑定,mybatis会自动为接口创建一个代理类对象
//代理类对象去执行CRUD操作
try {
UserMapperAnnotation mapper=session.getMapper(UserMapperAnnotation.class);
User user=new User(1,"Spring",9);
mapper.updateUser(user);
session.commit();//需要手动提交
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}
@Test
public void testDelete() throws IOException{
SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
SqlSession session=sqlSessionFactory.openSession();
//获取接口的实现类对象:session.getMapper(接口.class)
//将一个接口与一个xml配置文件进行绑定,mybatis会自动为接口创建一个代理类对象
//代理类对象去执行CRUD操作
try {
UserMapperAnnotation mapper=session.getMapper(UserMapperAnnotation.class);
mapper.deleteUserById(3);
session.commit();//需要手动提交
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}
@Test
public void testGetAll() throws IOException{
SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
SqlSession session=sqlSessionFactory.openSession();
//获取接口的实现类对象:session.getMapper(接口.class)
//将一个接口与一个xml配置文件进行绑定,mybatis会自动为接口创建一个代理类对象
//代理类对象去执行CRUD操作
try {
UserMapperAnnotation mapper=session.getMapper(UserMapperAnnotation.class);
List<User> users=mapper.getAllUsers();
for(User user:users){
System.out.println(user);
}
session.commit();//需要手动提交
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}
}

原创粉丝点击