Mybatis从创建到开发

Mybatis 对原生态JDBC程序优化;

一、开发DAO开发(接口和类)
二、Mybatis 的mapper 接口(代理开发)
mybatis 核心:
Mybatis 输入映射
Mybatis输出映射

原始方法

导入两个jar包,mybatis-3.5.1.jar和mysql-connector-java-5.1.10-bin.jar
需要日志再导log4j-1.2.17.jar(一般可不用)
写bean类(与数据库相匹配的对象,Ps.名字不要写错,很麻烦)
public class user {int id;String name;int age;}get,set,tostring

一、写全局配置文件(数据源,运行环境)/Mybatis/src/conf/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">
		<configuration>
		 <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="root"/>
		 </dataSource>
		 </environment>
		 </environments>
		 <!-- 将写好的sql映射文件注册到全局配置中 -->
		 <mappers>
		 <mapper resource="./conf/mapper.xml"/>
		 </mappers>
		</configuration>

二、sql 映射文件配置了每个sql,封装规则/Mybatis/src/conf/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="com.guan.Mapper">
			 <!-- 
			 id:唯一标识,相当于函数名
			 resultType:返回值类型
			 #{id} 从传递过来的参数中取出id值
			  --> 
			 <select id="selectuser" resultType="com.guan.bean.user">
			 select * from users where id = #{id}
			 </select>
			</mapper>

三、注册在全局配置文件中

<!-- 将写好的sql映射文件注册到全局配置中 (前面已加)-->
		 <mappers>
		 <mapper resource="./conf/mapper.xml"/>
		 </mappers>

四、根据全局配置文件得到sqlsessionfactory

		    import……
		    public class mbs_test {
		    		//将映射提取为方法
		    	private SqlSessionFactory getSqlsessionFatory() throws IOException {
		    		String resource = "./conf/mybatis-config.xml";
		    		InputStream inputStream = Resources.getResourceAsStream(resource);
		    		SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
		    		return sqlSessionFactory;
		    	}
		    	//测试类
		    	@Test
		    	public void test() throws IOException {
		    		SqlSessionFactory sqlSessionFactory = getSqlsessionFatory();	
		    		//获取sqlSession对象   直接执行已经映射的sql语句
		    		SqlSession session = sqlSessionFactory.openSession();
		    		//第一个参:唯一标识     statement Unique identifier matching the statement to use.
		    		//第二个参:编号      parameter A parameter object to pass to the statement.
		    		try {
		    		user user1=session.selectOne("com.guan.Mapper.selectuser", 1);
		    		System.out.println(user1);}finally {
		    			session.close();
		    		}
		    	}
		    }

五、用完一定session.close();(前面已加)关闭

接口方式

导入两个jar包,
写mybatis-config.xml及(Mybatis_config.properties可在xml里直接实现)
写bean类(与数据库相匹配的对象,Ps.名字不要写错,很麻烦)

public class user {int id;String name;int age;}get,set,tostring

一、先写接口/Mybatis/src/com/guan/impl/mapper_impl.java

	    package com.guan.impl;
	    
	    		import com.guan.bean.user;
	    
	    		public interface mapper_impl {
	    		  
	    			public user getUserById(Integer id);
	    			
	    			
	    		}

二、再写/Mybatis/src/conf/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="com.guan.impl.mapper_impl">
					 <!-- 
					 id:唯一标识,相当于函数名
					 resultType:返回值类型
					 #{id} 从传递过来的参数中取出id值
					  --> 
					   <!--  接口版   ID换为接口名-->
					 <select id="getUserById" resultType="com.guan.bean.user">
					 select * from users where id = #{id}
					 </select>
			
					  <!-- 添加<insert id="名字" parameterType="可以省略"   >sql语句</insert>
					   修改<update id="名字" >sql语句</update>
					   删除<delete id="名字">sql语句</delete>
					   -->
					  
					  <!-- <sql>可以存储一些经常用的sql代码段   调用用 <include refid="userColumns"><property name="alias" value="t1"/></include>-->
					 <!-- selectKey::: -->
					</mapper>

三、测试/Mybatis/src/com/guan/batistest/mbs_test.java

	    package com.guan.batistest;
	    
	    			import static org.junit.Assert.*;
	    
	    			import java.io.IOException;
	    			import java.io.InputStream;
	    
	    			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.Test;
	    
	    			import com.guan.bean.user;
	    			import com.guan.impl.mapper_impl;
	    
	    			public class mbs_test {
	    				private SqlSessionFactory getSqlsessionFatory() throws IOException {
	    					String resource = "./conf/mybatis-config.xml";
	    					InputStream inputStream = Resources.getResourceAsStream(resource);
	    					SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
	    					return sqlSessionFactory;
	    				}
	    
	    				@Test
	    				public void test1() throws IOException {
	    					//获取sessionFactory对象
	    					SqlSessionFactory sessionFactory= getSqlsessionFatory();
	    					//获取SqlSession对象sessionFactory.openSession(true);自动提交
	    					SqlSession openSession=sessionFactory.openSession();
	    					//3\获取接口的实现对象,,,此处是Mybatis为接口创建的代理对象
	    					try {
	    					mapper_impl mapper=openSession.getMapper(mapper_impl.class);
	    					user user=mapper.getUserById(1);
	    					System.out.println(user);}finally {
	    						openSession.close();
	    					}
	    					
	    					
	    				}
	    				 
	    
	    			}

Mybatis的动态SQL

动态sql

 一、如果<if  test="条件语句"></if>
		<select id="findActiveBlogWithTitleLike"
			     resultType="Blog">
			  SELECT * FROM BLOG
			  WHERE state = ‘ACTIVE’
			  <if test="title != null">
			    AND title like #{title}
			  </if>
		</select>
二、选择语句<choose><when>< otherwise>
			     <choose>
				<when  test="条件">
					语句1
				</when>
				< otherwise  test="条件">
					语句2
				</ otherwise>
			     </choose>

三、当条件满足时自动添加where
				<where>
					<if test="条件1"></if>
					<if test="条件2"></if>
				</where>

四、  当条件允许时set    trim
				<update>
				<set>
				<if></if>
				</set>
				</update>
五、遍历foreach输出item
				<foreach item="item" index="index" collection="list"  open="(" separator="," close=")">
				#{item}
				</foreach>

六、绑定上下文
				<select id="selectBlogsLike" resultType="Blog">
					  <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
					  SELECT * FROM BLOG
					  WHERE title LIKE #{pattern}
				</select>

高级结果集映射
延迟加载
查询缓存(一级,二级)
框架整合
逆向工程

全局配置文件怎么写

一、/Mybatis/src/conf/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">
				<configuration>
				<!-- properties 引外部配置文件 resource="文件路径"  url="网络路径"-->
				 <properties resource="./conf/Mybatis_config.properties"  ></properties>
					<!--settings 包含设置项 <settings> name="设置项名" value="值"<setting name="" value="" /></settings> -->
					<!-- 别名处理器 为javabean类型起名<typeAliases>type="全名" alias="别名" <typeAlias type="" alias=""/>批量起名<package name="" /></typeAliases>-->
				<!--plugins插件     拦截…… -->
				<!--添加log4j  -->
				<settings><setting name="logImpl" value="LOG4J"/> <setting name="autoMappingBehavior" value="FULL"/> </settings>
			
			
			
				<!-- environments环境门     environment  具体环境   development开发环境text测试环境
				必须有transactionManager dataSource -->
					<environments default="development">
						<environment id="development">
						<!--  transactionManager事务管理器 -->
							<transactionManager type="JDBC" />
							<!-- dataSource 数据源   -->
							<dataSource type="POOLED">
								<property name="driver" value="${jdbc.driver}" />
								<property name="url" value="${jdbc.url}" />
								<property name="username" value="${jdbc.username}" />
								<property name="password" value="${jdbc.password}" />
							</dataSource>
						</environment>
					</environments>
					<!--databaseIdProvider    数据库标识-->
					
					<!-- 将写好的sql映射文件注册到全局配置中 -->
					<!-- mappers url="网络文件"resource=“文件” class="引用接口" -->
					<mappers>
						<mapper resource="./conf/mapper.xml" />
					</mappers>
				</configuration>

二、/Mybatis/src/conf/Mybatis_config.properties

					jdbc.driver=com.mysql.jdbc.Driver
					jdbc.url=jdbc:mysql://localhost:3306/mybatis
					jdbc.username=root
					jdbc.password=root

log4j日志怎么写

一、/Mybatis/src/conf/log4j.xml
			    <?xml version="1.0" encoding="UTF-8"?>
			    <!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
			    <log4j:configuration>
			        <!--输出到控制台-->
			        <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
			            <param name="Threshold" value="DEBUG"/>
			            <layout class="org.apache.log4j.PatternLayout">
			                <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
			            </layout>
			        </appender>
			    
			        <!--输出到文件(info)-->
			        <!--将生成“info.log.2014-06-11”这样的日志文件-->
			        <appender name="fileAppenderInfo" class="org.apache.log4j.DailyRollingFileAppender">
			            <param name="File" value="${user.home}/logs/website/info.log" />
			            <param name="DatePattern" value=".yyyy-MM-dd" />
			            <layout class="org.apache.log4j.PatternLayout">
			                <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
			            </layout>
			            <filter class="org.apache.log4j.varia.LevelRangeFilter">
			                <param name="LevelMin" value="INFO" />
			                <param name="LevelMax" value="INFO" />
			            </filter>
			        </appender>
			    
			        <!--输出到文件(warn)-->
			        <appender name="fileAppenderWarn" class="org.apache.log4j.DailyRollingFileAppender">
			            <param name="File" value="${user.home}/logs/website/warn.log" />
			            <param name="DatePattern" value=".yyyy-MM-dd" />
			            <layout class="org.apache.log4j.PatternLayout">
			                <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
			            </layout>
			    
			            <filter class="org.apache.log4j.varia.LevelRangeFilter">
			                <param name="LevelMin" value="WARN" />
			                <param name="LevelMax" value="WARN" />
			            </filter>
			        </appender>
			    
			        <!--输出到文件(error)-->
			        <appender name="fileAppenderError" class="org.apache.log4j.DailyRollingFileAppender">
			            <param name="File" value="${user.home}/logs/website/error.log" />
			            <param name="DatePattern" value=".yyyy-MM-dd" />
			            <layout class="org.apache.log4j.PatternLayout">
			                <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
			            </layout>
			            <filter class="org.apache.log4j.varia.LevelRangeFilter">
			                <param name="LevelMin" value="ERROR" />
			                <param name="LevelMax" value="ERROR" />
			            </filter>
			        </appender>
			    
			        <!--屏蔽所有org.springframework.*输出的Debug(及以下)信息-->
			        <logger name="org.springframework">
			            <level value="INFO"></level>
			        </logger>
			    
			        <root>
			            <level value="ALL"/>
			            <appender-ref ref="consoleAppender" />
			            <appender-ref ref="fileAppenderInfo" />
			            <appender-ref ref="fileAppenderWarn" />
			            <appender-ref ref="fileAppenderError" />
			        </root>
			    </log4j:configuration>

二、日志配置文件/Mybatis/src/conf/log4j.properties

			    #全局日志配置     代表root节点整个工程下所有输出日志的地方配置的输出的级别和输出的位置。
			    log4j.rootLogger=DEBUG,Console
			    # `MyBatis日志配置....代表特定包下的特定级别。log4j把日志分为ALL、TRACE&(跟踪)、DEBUG(调试)、INFO(信息)、WARNING(警告)、ERROR(错误)、FITAL(致命)、OFF等几个级别,级别依次升高。级别高的Level会屏蔽级别低的信息`。
			    log4j.logger.org.mybatis.example.BlogMapper=TRACE
			    #控制台输出.
			    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
			    #代表为特定的包(org.apache)配置特定的级别INFO,这样就把上面总的级别DEBU掩盖了,这样一来,这个包下的DEBUG信息就不会输出,就不会影响我们想要看的信息。
			    log4j.logger.org.apache=INFO

三在全局配置文件里添加log4j

		    <!--添加log4j  -->
		    <settings><setting name="logImpl" value="LOG4J"/> <setting name="autoMappingBehavior" value="FULL"/> </settings>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值