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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybaties"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 注册userMapper.xml配置文件 -->
<mappers>
<!-- 注册配置文件 -->
<mapper resource="taotao/mapper/userMapper.xml"/>
<mapper class="taotao.main.UserMaperI"/>
</mappers>
</configuration>
使用注解的动态代理,注解的接口类类就是UserMaperI
UserMaperI接口使用了注解定义了sql语句
package taotao.main;
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;
public interface UserMaperI {
//使用@insert注解指明add方法执行sql
@Insert("insert into users (name,age) values(#{name},#{age})")
public int add(Users users);
//使用@delete注解指明deleteById方法执行sql
@Delete("delete from users where id=#{id}")
public int deleteById(int id);
//通过@update注解指明updateById方法执行sql
@Update("update users set name = #{name} ,age=#{age} where id=#{id}")
public int updateById(Users users);
//通过@select注解指明selectUserById方法执行sql
@Select("select * from users where id = #{id}")
public Users selectUserById(int id);
//通过@select注解指明SelectUserAll方法执行sql
@Select("select * from users")
public List<Users> selectUsersAll();
}
使用工具类生成SqlSession,通过getMapper(接口类.class)生成动态的实现类
import java.io.InputStream;
import org.apache.ibatis.builder.StaticSqlSource;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatiesUtil {
//通过SqlSessionFafctory,创建SqlSession,并且使用的openSession为true.不用自动提交事务sqlSession.commit()
public static SqlSession getSqlSession(boolean flat){
//获取配置文件
String config = "config.xml" ;
//获取类加载器,使用类加载器获取mybaties中的数据文件
InputStream resourceAsStream = MybatiesUtil.class.getClassLoader().getResourceAsStream(config);
// 创建能执行映射文件中的sql的sqlsession
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
return build.openSession(flat);
}
//通过SqlSessionFactory,创建SqlSession,并且使用的OpenSession为默认值
public static SqlSession getSqlSession(){
//获取配置文件
String config = "config.xml";
//获取取类加载器
ClassLoader classLoader = MybatiesUtil.class.getClassLoader();
//通过类加载器。加载配置文件中的数据sql文件
InputStream resourceAsStream = classLoader.getResourceAsStream(config);
//获取SqlSessionFactory的工厂
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获取SqlSessionFactory
SqlSession openSession = build.openSession();
return openSession;
}
}
openSession(true)与openSession()区别是:前者是自动提交事物,后者是需要手动提交事物
在实现接口动态代理的增删改需要使用自动的提交事物,才会有数据的改变
package taotao.main;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import taotao.utils.MybatiesUtil;
public class AnnotationMain {
public static void main(String[] args) {
AnnotationMain annotationMain = new AnnotationMain();
//annotationMain.getAdd();//添加数据,只有自动提交事物才会成功
//annotationMain.getUpdate();//修改数据,只有自动提交事物才会成功
//annotationMain.getDeleteById();//删除数据,只用自动提交事物才会成功.不用先查询
// annotationMain.getSelectById(7); //查询不用提交事物
//annotationMain.getSelectAll();//不需要自动提交事物
}
//添加数据
public void getAdd(){
//获取SqlSession,
//动态获取对象的实现接对象需要获取。提交事物
SqlSession sqlSession = MybatiesUtil.getSqlSession(true);
//得到UserMapper接口的实现对象,UserMaperI对象是由SqlSession.getMapper(UserMaperI.class)动态获取
UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
Users users = new Users();
users.setAge(1232);
users.setName("还需努力");
int add = mapper.add(users);
sqlSession.close();//使用sqlSession关闭可以关闭,结果没有影响
System.out.println("添加数据:"+add);
}
//修改数据
public void getUpdate(){
//获取SqlSession
SqlSession sqlSession = MybatiesUtil.getSqlSession(true);
sqlSession.commit();//手动提交事物
//得到UserMapper接口的实现对象,UserMapperI对象是由SqlSession.getMapper(UserMaperI.class)动态获取
UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
Users users = new Users();
users.setAge(98);
users.setName("努力才会有结果");
users.setId(3);
int updateById = mapper.updateById(users);
//sqlSession执行完sql关闭
sqlSession.close();
System.out.println("修改参数:"+updateById);
}
//通过id删除数据
public void getDeleteById(){
//获取sqlSession
SqlSession sqlSession = MybatiesUtil.getSqlSession(true);
//通过sqlSession接口实现对象,UserMapperI对象是由SqlSession.getMapper(UserMaper。class)动态实现接口
UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
Integer intter=3;
int deleteById = mapper.deleteById(3);
System.out.println("删除数据:"+deleteById);
}
//通过Id查询数据
public Users getSelectById(int number){
//获取sqlSession
SqlSession sqlSession = MybatiesUtil.getSqlSession();
//通过sqlSession接口实现对象,UserMapperI对象是由SqlSession.getMapper(UserMaper.class)动态实现
UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
Users selectUserById = mapper.selectUserById(number);
System.out.println(selectUserById.toString());
return selectUserById;
}
public void getSelectAll(){
//获取sqlSession
SqlSession sqlSession = MybatiesUtil.getSqlSession();
//通过sqlSession接口实现对象,UserMaperI对象是由SqlSession.getMapper(UserMapper.class)动态实现
UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
List<Users> selectUsersAll = mapper.selectUsersAll();
System.out.println(selectUsersAll.size());
}
}