mybits

MyBatis(原名iBatis)源自Apache的iBatis开源项目, 从iBatis3.x开始正式更名为MyBatis。它是一个优秀的持久层框架。
官网地址:http://www.mybatis.org/mybatis-3/
为了和数据库进行交互,通常的做法是将SQL语句写在Java代码中,SQL语句和Java代码耦合在一起不利于后期维护修改,而MyBatis能够帮助我们将SQL语句和Java代码分离,方便了后期因需求变动而对SQL语句进行修改。(联系properties文件的作用)
是ORM框架 (对象持久化)
通过mybatis提供得映射方式 可以自由地将数据映射为JavaBean对象

创建工程

创建一个Maven工程
1.引入jar包 mybatis包 从官网下载 (可引入log4j 查询时可看更详细的信息)
2.创建一个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>
	<properties resource="jdbc.properties"></properties><!-- 配置mysql信息 -->
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
	<!--  全局配置B 	
	<typeAliases>
		<typeAlias type="userinfo.vo.UserInfo" alias="userinfo"/>
	</typeAliases>
	-->
	<!--配置A -->
	<environments default="dev">
		<environment id="dev">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="${mysql_driver}" />
				<property name="url" value="${mysql_url}" />
				<property name="username" value="${mysql_username}" />
				<property name="password" value="${mysql_passwd}" />
			</dataSource>
		</environment>
		<!--  
		<environment id="dev">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/demo" />
				<property name="username" value="****" />
				<property name="password" value="****" />
			</dataSource>
		</environment>
		-->
	</environments>
	<mappers>
		<mapper resource="userinfo.xml"/>
	</mappers>
</configuration>

配置数据库信息 可创建一个jdbc.properties 然后可按第一种方法配置 若没有 则按第二种方法
resource将mapper注册进来
3.配置类信息 如

public class UserInfo {
	private String id;
	private String userName;
	private String password;
	private List<Address> addresses;
	
	public List<Address> getAddresses() {
		return addresses;
	}
	
	public void setAddresses(List<Address> addresses) {
		this.addresses = addresses;
	}
	
	public String getId() {
		return id;
	}
	
	public void setId(String 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 String toString() {
		return "UserInfo [id=" + id + ", userName=" + userName + ", password=" + password + "]";
	}

}

注意!若在写查询的时候想要返回某对象所有参数 需要使用list 这时候必须在类中加上toString方法!
4.配置方法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="userinfo.dao.IUserInfoDao">
	<resultMap type="userinfo.vo.UserInfo" id="userinfo">
		<id column="user_id" property="id" />
		<result column="user_name" property="userName" />
		<result column="passwd" property="password" />
	</resultMap>
	<!--id主键 -->
	
	
	<select id="getUserId" parameterType="string" resultMap="userinfo"><!--resultType(引用mybatis中配置的时候 此处使用的为上列的resultMap)可直接写string 八种基本数据类型前需加_  如_int,_byte  包装类则为小写如int,byte-->
		select  user_id, user_name, passwd from t_sys_user where user_id=#{id} 
	</select>
	
	<select id="getByIds" parameterType="list" resultMap="userinfo"><!--resultType可直接写string 八种基本数据类型前需加_  如_int,_byte  包装类则为小写如int,byte-->
		select  user_id, user_name, passwd from t_sys_user 
		<where>
			<if test="list != null"><!--注意list不是字符串不会为""不需要and list!='' -->
				<foreach collection="list" item="userid" open="and user_id in (" separator="," close=")">
					#{userid}
				</foreach>
			</if>
		</where>
	</select>
	<!-- 查询多条数据 open前缀   separator分隔号  close后缀-->
	<!--  
	<select id="getByDouble" resultMap="userinfo">
		select  userid, userName, password from t_sys_user where 1=1
		<if test="userid != null and userid !=''">
		and user_id=#{id}
		</if>
		<if test="userName != null and     userName !=''">
		and user_name=#{userName}
		</if>
	</select>
	-->
	<select id="getByDouble" resultMap="userinfo">
		select user_id, user_name, passwd from t_sys_user 
		<where>
			<if test="id != null and id !=''">
				and user_id=#{id}
			</if>
			<if test="userName != null and userName !=''">
				and user_name=#{userName}
			</if>
		</where>
	</select>
	<select id="select" resultMap="userinfo"><!-- 全局配置B可自定义resultType -->
		select user_id,user_name,passwd from t_sys_user<!-- userName 成员变量名与字段名不同不同 需在总xml配置A-->
	</select>
	
	<insert id="add">
	insert into t_sys_user(user_id,user_name,passwd) value(#{arg0},#{arg1},#{arg2})
	</insert>
	<delete id="delete">
		delete from t_sys_user where user_id=#{id1}
	</delete>

</mapper>

若加入

<resultMap type="userinfo.vo.UserInfo" id="userinfo">
		<id column="user_id" property="id">	<!--主键 -->
		<result column="user_name" property="userName">
		<result column="passwd" property="password">	
	</resultMap>

可以将
<select id="getUserId" resultType="userinfo"> select user_id id,user_name userName,passwd password from t_sys_user where user_id=#{id} </select>
改为
<select id="getUserId" resultType="userinfo"> select id, userName, password from t_sys_user where user_id=#{id} </select>

模糊查询select user_id from t_sys_user where user_name like '%${value}%'
使用标签select做数据表的查询操作:
属性id 标识映射文件中sql的唯一性 此id成为statementID 原因是此sql被映射到mappedStatement对象中。
#{paramName} 代表占位符 如果入参参数是基本数据类型,paramName可以任意指定,也可以是value
parameterType: 入参参数类型
resultType: 输出结果类型,标识将单条记录映射成java对象
${}: 表示拼接sql字符串 将接收到的参数内容不加任何修饰拼接在sql中,使用 ${}拼接sql可能会引起sql注入
${value}: 接收输入参数的内容,如果传入的是简单类型 ${}中只能使用value

采用mapper代理的方式进行Dao层开发,需要有几个约定(约定大于配置)
1.XXXMapper.xml中namespace的值需要与Dao接口中的全类名相同。(确定哪一个XXXMapper.xml文件)
2.XXXMapper.java接口中的方法名与XXXMapper.xml中的statementId相同(确定使用哪个sql)。
3.XXXMapper.java接口中的方法输入参数需要与XXXMapper.xml中的ParameterType定义的类型相同。(目前新版本不用写ParameterType)
4.XXXMapper.java 接口欧中的方法返回值需要与XXXMapper.xml中resultType定义的类型相同。(如果是基本数据类型也不用写)

5.在方法实现层内定义实现SqlSessionFactory

			InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
		//代指文件
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		//SqlSessionFactory代指一次数据库连接
			SqlSession sqlSession = sqlSessionFactory.openSession();//打开与数据库对话 默认值为flase 若写为true则自动提交不需要sqlSession.commit();
			
			IUserInfoDao userInfoDao = sqlSession.getMapper(IUserInfoDao.class);//实现Dao层 运用方法
发布了35 篇原创文章 · 获赞 0 · 访问量 655

猜你喜欢

转载自blog.csdn.net/Azadoo/article/details/104426335
今日推荐