Mybatis框架基础搭建及配置

Mybatis框架基础搭建及配置

目录

Mybatis框架基础搭建及配置

一、框架基础搭建

2、Mapper动态代理方式


一、框架基础搭建

 1、从官网上下Mybatis框架压缩包。新建一个Java工程,导入Mybatis中jar>mybatis-3.2.7\lib;本次项目采用Mysql数据库与junit测试,添加相应的jar依赖包;导入后将所有Jar添加值至项目>build path;创建相应的数据库表。

log4j.properties配置如下:

#定义LOG输出级别  
log4j.rootLogger=INFO,Console,File  
#定义日志输出目的地为控制台  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
#可以灵活地指定日志输出格式,下面一行是指定具体的格式  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  
  
#文件大小到达指定尺寸的时候产生一个新的文件  
log4j.appender.File = org.apache.log4j.RollingFileAppender  
#指定输出目录  
log4j.appender.File.File = C:/logs/ssm/ssm.log  
#定义文件最大大小  
log4j.appender.File.MaxFileSize = 10MB  
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志  
log4j.appender.File.Threshold = ALL  
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n 

创建后的工程项目如下:


2、在classpath下创建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事务管理-->
			<transactionManager type="JDBC" />
		<!-- 数据库连接池-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="" />
				<property name="password" value="" />
			</dataSource>
		</environment>
	</environments>
	<!-- mybatis框架需要加载映射文件 有三种方式-->
        <mappers>
            <!-- <mapper resource="User.xml"/>
		       <mapper class="com.study.mapper.UserMapper"/> 
		       <package name="com.study.mapper"/>
            -->
	        <mapper resource="User.xml"/>
        </mappers>

</configuration>

3、在classpath下的config目录下创建sql映射文件Users.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="com.study.pojo">
    <!-- namespace :命名空间,用于隔离sql语句
         parameterType:定义输入到sql中的映射类型,
         #{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。
        resultType:定义结果映射类型。
    -->
	<select id="findUserById" parameterType="Integer" resultType="com.study.pojo.User">
		select * from user where id = #{id}
	</select>
	
	<select id="findUserByName" parameterType="String" resultType="com.study.pojo.User">
		select * from user where username like '%${value}%'
	</select>
	
	<insert id="insertUser" parameterType="String">
		INSERT INTO user (username,sex,birthday,address) VALUES(#{username},#{sex},#{birthday},#{address})
	</insert>
	
	<delete id="deleteUserById" parameterType="Integer">
		delete from user where id=#{value}
	</delete>
	
	<update id="updateUserById" parameterType="com.study.pojo.User">
		UPDATE user SET username=#{username},sex=#{sex},address=#{address} where id=#{id}
	</update>
</mapper>

4、编写测试方法:


public class UserTest {

	@Test
	public void testFindUserById() throws Exception{
		String resource = "SqlMapConfig.xml";
		//通过流将核心配置文件读取进来
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//通过核心配置文件输入流来创建会话工厂
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		//通过工厂创建会话
		SqlSession openSession = factory.openSession();
		//第一个参数:所调用的sql语句= namespace+.+sql的ID
		User user = openSession.selectOne("test.findUserById", 1);
		System.out.println(user);
		openSession.close();
	}
	
	@Test
	public void testFindUserbyUserName() throws Exception{
		String resource = "SqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession openSession = factory.openSession();
		
		List<User> list = openSession.selectList("test.findUserByUserName", "王");
		System.out.println(list);
	}
	
	@Test
	public void testInsertUser() throws Exception{
		String resource = "SqlMapConfig.xml";
		//通过流将核心配置文件读取进来
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//通过核心配置文件输入流来创建会话工厂
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		//通过工厂创建会话
		SqlSession openSession = factory.openSession();
		
		User user = new User();
		user.setUsername("赵四");
		user.setBirthday(new Date());
		user.setSex("1");
		user.setAddress("北京昌平");
		System.out.println("====" + user.getId());
		
		openSession.insert("test.insertUser", user);
		//提交事务(mybatis会自动开启事务,但是它不知道何时提交,所以需要手动提交事务)
		openSession.commit();
		
		System.out.println("====" + user.getId());
	}
	
	@Test
	public void testDelUserById()throws Exception{
		String resource = "SqlMapConfig.xml";
		//通过流将核心配置文件读取进来
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//通过核心配置文件输入流来创建会话工厂
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		//通过工厂创建会话
		SqlSession openSession = factory.openSession();
		
		openSession.delete("test.delUserById", 29);
		//提交
		openSession.commit();
	}
	
	@Test
	public void testUpdateUserById() throws Exception{
		String resource = "SqlMapConfig.xml";
		//通过流将核心配置文件读取进来
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//通过核心配置文件输入流来创建会话工厂
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		//通过工厂创建会话
		SqlSession openSession = factory.openSession();
		
		User user = new User();
		user.setId(28);
		user.setUsername("王麻子");
		openSession.update("test.updateUserById", user);
		
		//提交
		openSession.commit();
	}


 

2、Mapper动态代理方式

开发规范 

Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

Mapper接口开发需要遵循以下规范:

Mapper.xml文件中的namespace与mapper接口的类路径相同。

  1. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
  2. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
  3. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

    Mapper.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="cn.itcast.mybatis.mapper.UserMapper">
    <!-- 根据id获取用户信息 -->
    	<select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
    		select * from user where id = #{id}
    	</select>
    <!-- 自定义条件查询用户列表 -->
    	<select id="findUserByUsername" parameterType="java.lang.String" 
    			resultType="cn.itcast.mybatis.po.User">
    	   select * from user where username like '%${value}%' 
    	</select>
    <!-- 添加用户 -->
    	<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
    	<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
    		select LAST_INSERT_ID() 
    	</selectKey>
    	  insert into user(username,birthday,sex,address) 
    	  values(#{username},#{birthday},#{sex},#{address})
    	</insert>
    
    </mapper>
    

    接口文件

    Public interface UserMapper {
    	//根据用户id查询用户信息
    	public User findUserById(int id) throws Exception;
    	//查询用户列表
    	public List<User> findUserByUsername(String username) throws Exception;
    	//添加用户信息
    	public void insertUser(User user)throws Exception; 
    }
    

    接口定义有如下特点:

 Mapper接口方法名和Mapper.xml中定义的statement的id相同。Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameterType的类型相同。Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同

测试 

Public class UserMapperTest extends TestCase {

	private SqlSessionFactory sqlSessionFactory;
	
	protected void setUp() throws Exception {
		//mybatis配置文件
		String resource = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//使用SqlSessionFactoryBuilder创建sessionFactory
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	
	Public void testFindUserById() throws Exception {
		//获取session
		SqlSession session = sqlSessionFactory.openSession();
		//获取mapper接口的代理对象
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//调用代理对象方法
		User user = userMapper.findUserById(1);
		System.out.println(user);
		//关闭session
		session.close();
		
	}
	@Test
	public void testFindUserByUsername() throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		List<User> list = userMapper.findUserByUsername("张");
		System.out.println(list.size());

	}
Public void testInsertUser() throws Exception {
		//获取session
		SqlSession session = sqlSessionFactory.openSession();
		//获取mapper接口的代理对象
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//要添加的数据
		User user = new User();
		user.setUsername("张三");
		user.setBirthday(new Date());
		user.setSex("1");
		user.setAddress("北京市");
		//通过mapper接口添加用户
		userMapper.insertUser(user);
		//提交
		session.commit();
		//关闭session
		session.close();
	}
	

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值