Mybatis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

1.开源的优秀的持久层框架;

2.SQL语句与代码分离;

3.面向配置编程;

4.良好的支持复杂的数据映射;

5.动态SQL;

下面来编写一个mybatis的实例,其中包括增删改查操作(有关的mybatisJar包河数据库驱动都可以在官网中下载,这里我也上传到资源了):

这里用的是mysql数据库,在数据库中建表什么的就不必说了,相比能看mybatis的朋友基本的数据库操作都是很6的;先来说一下mybatis的配置文件:

mybatisConfig.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>  
<!-- 定义别名,可以在POJO的映射xml文件中直接使用别名、方便 -->
     <typeAliases>  
        <typeAlias alias="User" type="com.entity.user" /> 
         <typeAlias alias="Auther" type="com.entity.Auther"/> 
    </typeAliases>  
    <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/mybatis"/>  
                <property name="username" value="root" />  
                <property name="password" value="123456" />  
            </dataSource>  
        </environment>  
    </environments> 
    <!-- 注册user的配置映射文件 ,mapper 的属性有三个resource(引入当前项目中的实体映射文件)、class(利用注解,定义在接口中)、package(导入包文件)--> 
     <mappers>
         <mapper resource="com/entity/user.xml"/><!-- 分隔符必须是/ -->
         <mapper class="com.entity.ImybatisMapper"/>

    <mapper resource="com/entity/auther.xml"/><!-- 分隔符必须是/ -->
     </mappers>
 </configuration>

上面是对基本mybatis的配置文件的介绍;

2.实体类说明:

user类

package com.entity;
public class user {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public user(String username, String password) {
super();
this.username = username;
this.password = password;
}
public user() {
super();
}
@Override
public String toString() {
return "user [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}

相关的映射文件user.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- 定义命名空间 -->
  <mapper namespace="user">
  <!-- 根据id获得user对象 -->
  <!-- 查找 -->
     <select id="selectuser" parameterType="int" 
         resultType="com.entity.user">
         select * from user where id=#{id}
     </select>
     <!-- 利用hashmap进行查找 -->
     <select id="loginselect" resultType="User" parameterType="hashmap">
      select * from user where username=#{username} and password=#{password}
     </select>
     <!-- 利用对象进行查询 -->
     <select id="objectselect" resultType="User" parameterType="User">
      select * from user where username=#{username} and password=#{password}
     </select>
     <select id="listselect" resultType="User">
      select * from user
     </select>
     <resultMap type="User" id="UserMap">
     <id property="id" column="id"/>
     <result property="username" column="username"/>
     <result property="password" column="password"/>
     </resultMap>
     <!-- 查询返回Map -->
     <select id="selectMap" resultMap="UserMap">
     select id,username,password from user
     </select>
     <!-- 插入 -->
      <insert id="insertUser" parameterType="User" statementType="PREPARED" keyProperty="id" useGeneratedKeys="true">
    insert into user (username,password) values (#{username},#{password})
      </insert>
     <!-- 更新 -->
      <update id="updateUser" parameterType="User" >
      update user set username=#{username},password=#{password} where id=#{id}
      </update>
   </mapper>

Auther类:

package com.entity;


public class Auther {
private int id;
private user u;
private String realname;
private String idcord;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public user getU() {
return u;
}
public void setU(user u) {
this.u = u;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}

public String getIdcord() {
return idcord;
}
public void setIdcord(String idcord) {
this.idcord = idcord;
}
public Auther() {
super();
}
public Auther(user u, String realname, String idcord) {
super();
this.u = u;
this.realname = realname;
this.idcord = idcord;
}
@Override
public String toString() {
return "Auther [id=" + id + ", u=" + u + ", realname=" + realname + ", idcord=" + idcord + "]";
}
}

映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="user">
<insert id="insertAuther" parameterType="Auther" statementType="PREPARED" >
insert into auther(userid,realname,idcard) values(#{u.id},#{realname},#{idcord})
</insert>
<resultMap type="Auther" id="UserAuther" >
<id property="id" column="auther.id"></id>
<result property="realname" column="realname"/>
<result property="idcord" column="idcard"/>
<association property="u" column="userid" javaType="User">
<id property="id" column="user.id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
</association>
</resultMap>
<select id="selectAutherJoin" resultMap="UserAuther">
select * from auther inner join user on user.id=auther.userid
</select>
</mapper>

测试代码,这里用Junit4进行测试:

package com.test;


import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
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.After;
import org.junit.Before;
import org.junit.Test;
import com.entity.ImybatisMapper;
import com.entity.user;

public class MybatisTest {
private SqlSessionFactory sessionFactory;
private SqlSession session;
@Before
public void testBefore(){
String resource = "mybatisConfig.xml";
   
  Reader resouce=null;
  try {
  //获取配置文件信息
resouce=Resources.getResourceAsReader(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   //构建sqlSession的工厂
   sessionFactory = new SqlSessionFactoryBuilder().build(resouce);
   //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
   //Reader reader = Resources.getResourceAsReader(resource); 
   //构建sqlSession的工厂
   //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
   //创建能执行映射文件中sql的sqlSession
    session = sessionFactory.openSession();
}
@After
public void testAfter(){
session.close();
}
@Test
public void testmybits(){
//根据操作实体的映射文件,获取操作实体的id
user u = session.selectOne("selectuser",1);
System.out.println(u.getUsername());
}
@Test
public void testInsertEntity(){
user u=new user("root","123456");
session.insert("insertUser",u);
session.commit();
}
@Test
public void testUpdata(){
user u=new user("admin","666666");
u.setId(2);
int i=session.update("updateUser",u);
System.out.println("影响行数:"+i);
session.commit();
}
@Test
public void testDelete(){
ImybatisMapper imy=session.getMapper(ImybatisMapper.class);
imy.deleteUserBook(1);
session.commit();
}
@Test
public void testHashMapselect(){
HashMap<String, String> hm=new HashMap<>();
hm.put("username", "admin");
hm.put("password", "666666");
user u=session.selectOne("loginselect", hm);
System.out.println(u.getId());
}
@Test
public void testObjectselect(){
user u=new user("root","123456");
user u1=session.selectOne("objectselect",u);
System.out.println(u1.getId());
}
@Test
public void testSelectGetList(){
List<user> list=session.selectList("listselect");
for(user u:list){
System.out.println(u.toString());
}
}
@Test
public void testSelectGetMap(){
List<user> list=session.selectList("selectMap");
for(user u:list){
System.out.println(u.toString());
}
}

@Test
public void testInsertAuther(){
user u=new user("luck","123456");
session.insert("insertUser",u);
Auther auther=new Auther(u,"大牛","123456");
session.insert("insertAuther",auther);
session.commit();
}
}

如果想要看到执行过程可以配置log4j.properties文件,设置为DEBUG式这样才能打印出来:

log4j.rootLogger=DEBUG, Console  
  
#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
  
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG

以上就是mybatis的增删改查操作,我通过测试的在Eclipse上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值