mybatis的入门

Mybatis原本是apache下面的一个开源项目,后来迁到了google code旗下,并改名为Mybatis。
Mybatis封装了JDBC的操作数据的过程。可以让开发人员更加专注于代码的开发,从繁杂的数据操作中解脱出来。
话不多说惹。把过程记录一下,

Mybatis的开发步骤(?):
(1):新建一个简单的Java EE项目;
(2):新建一个目录lib,在包下导入所要用的jar包;
https://pan.baidu.com/s/1mYW3lAMV-GfHFSM4laRsUw
(我把用到的jar包存上百度云啦)
导入的jar包
我简单的了解了一下所用到的这些jar包是干什么的。
asm,cglib,javassist:实现动态代理;
log4j:日志
mybatis:mybatis核心包
mysql-connector: 数据库驱动

因为使用的是log4j的,需要添加配置文件。在src下新建文件log4j.properties。
添加以下代码:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

(我这里没有导入junit的jar包,因为IDEA里面有junit测试插件。如何安装插件很容易搜到哈)

(3):新建一个包model,编写所要操作的实体类(User),以下是数据库
在这里插入图片描述

package com.zwj.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class User implements Serializable {
	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址
//以下方法通过generate里面的方法生成
	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 getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", sex=" + sex
				+ ", birthday=" + birthday + ", address=" + address + "]";
	}
}

(4):编写全局配置文件:在src下新建文件SqlMapConfig.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">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用dbcp连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--以下配置的是你自己的数据库信息-->
                <!--为了防止编码错误,可以加上这一段解决问题:?useUnicode=true&amp;characterEncoding=utf8-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisday1?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
               
            </dataSource>
        </environment>
    </environments>

    <mappers>
        
    </mappers>
</configuration>

(5)新建一个包mapper,在包下新建一个java类UserMapper,编写mapper接口文件。这里以根据一个用户id查询用户信息作为实例:

package com.zwj.mapper;
import com.zwj.model.User;

public interface UserMapper {
    
    public User findByid(int id);

}

(6)与UserMapper在同一个包(mapper)下,新建一个映射文件UserMapper.xml,添加以下代码:
id:映射文件中的id必须与接口中对应的方法名称一致(此处都是findByid)
parameterType:方法的参数类型
resultType:填写接口方法中返回类型。这里是返回一个用户信息Use,所以填写User模型的全限定名称(这里还没配置别名,所以写全限定名称)。如果返回类型是集合类型(List),resultType填写集合里模型的全限定名称(com.zwj.model.User)。

<?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文件,比如下面这一行!查询这个用到的就是UserMapper这个mapper,而且必须写全限定名!>
<mapper namespace="com.zwj.mapper.UserMapper">
		<select id="findByid" parameterType="int" resultType="com.zwj.model.User">
		      <!--以下的sql语句就是你mapper里面所要真正实现的sql语句,建议先在数据库中跑一跑,真的能跑出来,再直接拷贝进来-->
		        select * from user
		        where id=#{id};
		 </select>
</mapper>

(7)在全局配置文件SqlMapConfig.xml的mapper标签中,指定mapper映射文件(UserMapper):

<mappers>
        <!--资源路径是相对路径-->
        <mapper resource="com/zwj/mapper/UserMapper.xml"></mapper>
       
    </mappers>

(8)测试:因为在以后的学习中还要进行多次测试,所以我把session的建立和关闭以注解的形式写在了两个类的里面。

package com.zwj.test;

import com.zwj.mapper.UserMapper;
import com.zwj.model.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.Date;

public class Demo03 {

    SqlSession session;
    @Before
    public  void before() throws IOException{
        System.out.println("before……");
        //获取全局映射文件
        InputStream is= Resources.getResourceAsStream("SqlMapConfig.xml");
       //建立 会话工厂
        SqlSessionFactory sessiomFactory=new SqlSessionFactoryBuilder().build(is);
      //通过工程建立session
        session=sessiomFactory.openSession();

    }

    @After
    public void after(){
        System.out.println("after……");
        session.close();//关闭session
    }

    @Test
    public void test1(){

        UserMapper userMapper=session.getMapper(UserMapper.class);
        System.out.println(userMapper.findByid(10));
        session.commit();//提交事务
        //在查询的情况下,可以不commit。但是在增删改的情况下,数据一定要commit才可以被数据库进行真实操作!!!
    }
    }

查询结果如下图所示:
在这里插入图片描述
基本上就是这样一个流程。
最后放一下目录图,因为我是学的差不多了,才开始写笔记,所以emmm目录有点多,但是大概是这个意思哈。(我没提到的都是无关的哈)
在这里插入图片描述

有几点想要总结一下:
(1)mapper接口文件(UserMapper)和映射文件()一定要在同一个包下!!!
(2)mappe接口文件(UserMapper)里面的方法只能有一个参数!
(3)mapper映射文件的mapper标签里面一定要写命名空间!
(4)数据的增删改操作一定要commit操作!一定要提交!
(5)映射文件里面的第一个id必须与mapper接口文件的方法名一样!
(6)接口方法返回类型为集合(List)的话,在映射文件中resultType就写集合里面元素(User)的类型(com.zwj.model.User)。

emmmm……个人笔记,可能写的很不完善,有欠缺之处。如果有大佬看到并且发现其中的错误,欢迎指正哈!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值