MyBatis框架的使用

使用步骤

1.导入jar包 

除了mybatis的jar包外,还需要动态代理用到的jar包,数据库要用到的jar包

2.建立源代码文件夹,并在其下建立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">
<!--配置项主要有三项:别名,应用环境,mapper文件位置-->
<configuration>
	<!--对完全限定名较长的类,可在这里对其起别名(一般取类名),供mapper文件使用-->
	<typeAliases>
		<typeAlias type="com.success.entity.User" alias="User"/>
		<typeAlias type="com.success.entity.News" alias="News"/>
	</typeAliases>
	
	<!--对应用环境的配置,因为同一个项目可能需要在不同的环境下运行-->
	<environments default="dev">
		<!--对开发环境使用的事务管理器和数据源进行配置-->
		<environment id="dev">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
				<property name="url" value="jdbc:oracle:thin:@198.9.1.158:1521:cnrjmam"/>
				<property name="username" value="mam42"/>
				<property name="password" value="password"/>
			</dataSource>
		</environment>
		
		<!--对测试环境使用的事务管理器和数据源进行配置-->
		<environment id="test">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql:///mydb"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	
	<!--明确所有mapper文件的位置-->
	<mappers>
		<mapper resource="com/success/mapper/usermapper.xml"/>
		<mapper resource="com/success/mapper/newsmapper.xml"/>
	</mappers>

</configuration>


3.根据数据库设计在src中建立mapper包(或dao包),编写mapper文件

示例①usermapper.xml

<!--mapper包相当于DAO包,通过对它的调用来实现对数据的增删改查-->
<?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文件的命名空间只要保证唯一性可以随意起,但如果还要写它对应的接口时,则需要规范命名-->
<mapper namespace="com.success.mapper.UserMapper">

	
	<!--
		对于select以外的三种操作,很简单:只需要采用相应的结点,写sql语句,配置id和字段类型
		字段类型有两类:①int,String,long型:适用于sql语句中只需要一个变量的情况
		②对象:适用于sql语句中需要多个变量的情况(sql语句引用时,只需要写其属性名)
	-->
	<insert id="save" parameterType="User">
		INSERT INTO t_user(username,PASSWORD) VALUES(#{username},#{password})
	</insert>


	<delete id="del" parameterType="long">
		delete from t_user where id = #{id}
	</delete>
	
	<update id="edit" parameterType="User">
		update t_user set username = #{username},password = #{password} where id = #{id}
	</update>
	
	
	<!-- 
		对于查询语句,分两类情况
		①要查询的对象其属性中【不包含】其他对象或其他对象的集合:只使用select一个结点即可
		要查询的是对象时:resultType为对象的别名
		要查询的是对象集合时: resultType为对象的list
	 -->
	<select id="findById" parameterType="long" resultType="User">
		SELECT id,username,password FROM t_user WHERE id = #{id}
	</select>
	
	<!-- 
		②要查询的对象其属性中【包含】其他对象或其他对象的集合:需要使用resultMap结点与select结点配合使用,要注意保证resultMap结点的id属性值与select的resultMap属性值相同
		resultMap有id,type两个属性,结点下有四类子节点:id与result(都有column与property两个属性,前者表示sql语句查询出的结果集中的列名,后者表示对象的属性名,两者要相对应),collection(有property与ofType属性)与association(有property,column,javaType属性,column表示表格中引用其他表的列名)
		
		包含其他对象的集合时:
	 -->
	<select id="findByIdwithNews" parameterType="long" resultMap="findUser">
		SELECT t_user.id,username,PASSWORD,t_news.id AS newsid,title,user_id
		FROM 
		t_user LEFT JOIN t_news
		ON 
		t_user.id = t_news.user_id
		WHERE t_user.id = #{id}
	</select>
	
	
	<resultMap type="User" id="findUser">
		<id column="id" property="id"/>
		<result column="username" property="username"/>
		<result column="password" property="password"/>
		<collection property="newsList" ofType="News">
			<id column="newsid" property="id"/>
			<result column="title" property="title"/>
			<result column="user_id" property="user_id"/>
		</collection>
	</resultMap>
</mapper>


 

示例②newsmapper.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.success.mapper.NewsMapper">
	
	<!-- 表示使用缓存 -->
	<cache/>  
	
	<select id="findById" resultMap="findByNews" parameterType="long">
		SELECT t_news.id,title,user_id,t_user.id AS userid,username,PASSWORD
		FROM t_news 
		LEFT JOIN t_user
		ON t_news.user_id = t_user.id
		WHERE t_news.id = #{id}
	</select>
	
	<select id="findAll" resultType="list"  resultMap="findByNews">
		SELECT t_news.id,title,user_id,t_user.id AS userid,username,PASSWORD
		FROM t_news 
		LEFT JOIN t_user
		ON t_news.user_id = t_user.id
	</select>
	
	
	
	<resultMap type="News" id="findByNews">
		<id property="id" column="id"/>
		<result property="title" column="title"/>
		<result property="user_id" column="user_id"/>
		<association property="user" column="user_id" javaType="User">
			<id property="id" column="userid"/>
			<result property="username" column="username"/>
			<result property="password" column="password"/>
		</association>
	</resultMap>
	
</mapper>


4.测试类

一种写法:

package com.success.test;

import java.io.Reader;
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 com.success.entity.News;


public class TestCRUD {


	public static void main(String[] args) throws Exception {
		Reader reder = Resources.getResourceAsReader("mybatis-config.xml");
		
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reder);
		
		//	true可要可省,若要,则表示每执行一次session的CRUD方法就提交一次;		
		//  若省去,则表示只有在调用session的commit方法后才将上面的操作一起提交。
		SqlSession session = factory.openSession(true);
		
	
		
		// 相当于一个crud方法的位置,实际上是mapper配置文件的相应结点,
		// 根据id为findAll找到的,还有一个备用参数,用于传sql需要的参数
		List<News> list = session.selectList("com.success.mapper.NewsMapper.findAll");
		
		for(News news : list) {
			System.out.println(news.getId() + "\t" + news.getTitle() 
					+ "\t" + news.getUser().getUsername());
		}
		
		
		//查找单个对象
		/*News news = (News) session.selectOne("com.mapper.NewsMapper.findById", 1L);
		
		System.out.println(news.getTitle());
		System.out.println(news.getUser().getUsername());*/
		
		//查找单个对象
		/*
		User user = (User) session.selectOne("com.mapper.UserMapper.findByIdwithNews", 1L);
		
		System.out.println(user.getUsername());
		for(News news : user.getNewsList()) {
			System.out.println(news.getTitle() + "\t" + news.getId());
		}
		*/
		
		//添加和删除方法
		/*User user = new User();
		user.setId(25);
		user.setPassword("Mybatis");
		user.setUsername("Struts2");
		
		int rows = session.update("com.mapper.UserMapper.edit", user);
		System.out.println(rows);*/
		/*int rows = session.delete("com.mapper.UserMapper.del", 27);
		System.out.println(rows);*/
			
		session.close();
	}
}


 

另一种写法:

public class AnotherTest {

	public static void main(String[] args) throws Exception {
		Reader reder = Resources.getResourceAsReader("mybatis-config.xml");
		
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reder);
		
		//	true可要可省,若要,则表示每执行一次session的CRUD方法就提交一次;		
		//  若省去,则表示只有在调用session的commit方法后才将上面的操作一起提交。为了和上边对照,这里省去
		SqlSession session = factory.openSession();
		
		
		User user = new User();
		user.setPassword("Mybatis");
		user.setUsername("springmvc");
		//【这里是重点】——根据mapper文件的命名空间,建立相应的接口,要保证名称(接口名,参数类型,结果类型)一一对应
		UserMapper mapper = session.getMapper(UserMapper.class);
		
		int rows = mapper.save(user);
		System.out.println(rows);
		session.commit();
		
		
		User user2 = mapper.findById(8);
		System.out.println(user2.getUsername());
		
		session.close();
		
	}
}


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值