欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis入门HelloWorld程序

程序员文章站 2022-05-29 20:05:32
...

注意我这里使用的是maven项目:


第一步加入架包:

mybatis入门HelloWorld程序

第二步配置mybatis配置文件,在src下面建立文件mybatis.xml文件:

mybatis入门HelloWorld程序


第三步建立一个Java文件,和一个mybatis的映射文件:

mybatis入门HelloWorld程序


第四步mybatis.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="com/et/TL/Mybatis/lesson01/utils/jdbc.properties"></properties>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"></transactionManager>
			<!-- 
				连接数据库
			 -->
			<dataSource type="POOLED">
				<property name="driver" value="${classDriverManageName}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${userAccount}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 
		引用映射文件
	 -->  
	 <mappers>
	 	<mapper resource="com/et/TL/Mybatis/lesson01/helloworld/department_mapp.xml"/>
	 	<mapper resource="com/et/TL/Mybatis/lesson01/baseInterface/department_mapp.xml"/>
	 </mappers>
</configuration>

第五步department_mapp.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.et.TL.Mybatis.lesson01.helloworld.department_mapp">
	
	<select id="query" resultType="map">
	
		select * from department
	</select>
</mapper>



第六步HelloWorld文件中的内容:

package com.et.TL.Mybatis.lesson01.helloworld;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class HelloWorld {

	
	
public static SqlSession getSqlSession(String myBatisXmlFile) throws IOException{
		
		//1.加载src下的mybatis配置文件
		InputStream is = Resources.getResourceAsStream(myBatisXmlFile);
		
		//2.创建SqlSessionFactory对象
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
		
		//3.获取加载sql语句的SqlSession对象
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//4.返回sqlSession
		return sqlSession;
	}
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		//1.加载src下的mybatis配置文件
		InputStream is = Resources.getResourceAsStream("mybatis.xml");
		
		//2.创建SqlSessionFactory对象
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
		
		//3.获取加载sql语句的SqlSession对象
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//4.得到department_mapp的映射文件的namespace和查询语句的id
		String statement = "com.et.TL.Mybatis.lesson01.helloworld.department_mapp.query";
		
		//5.调用sqlSession对象中的方法 selectList
		List<Map<String,Object>> listObj = sqlSession.selectList(statement);
		
		//6.循环打印
		for (Map<String, Object> map : listObj) {
			
			System.out.println("DeptID:"+map.get("DEPARTMENTID")+" DeptName:"+map.get("DEPARTMENTNAME")+"    DeptAddr:"+map.get("DEPARTMENTLOCATION"));
			System.out.println("-------------------------------------");
		}
	}
}

接口映射:

创建一个接口,接口里面的方法必须和***_mapp.xml的增删改查对应的ID
		public List<Map<String,Object>> query();

必须一致,并且跟节点的namespace属性对应接口的全路径,否则编译
		<mapper namespace="com.et.TL.Mybatis.lesson01.baseInterface.HelloWorld">
	
			<select id="query" resultType="map">
	
				select * from department
			</select>
		</mapper>

不会通过,通过根目录下的mybatis的配置文件来引
		<!-- 
			引用映射文件
	 	-->  
	 	<mappers>
	 		<mapper resource="com/et/TL/Mybatis/lesson01/helloworld/department_mapp.xml"/>
	 		<mapper resource="com/et/TL/Mybatis/lesson01/baseInterface/department_mapp.xml"/>
	 	</mappers>

接口映射(注解):

package com.et.TL.Mybatis.lesson01.InterfaceNote;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Select;

public interface HelloWorld {
	
	/**
	 * 对应的sql语句使用对应的sql注解
	 * @return
	 */
	@Select(value="select * from department")
	public List<Map<String,Object>> query();
}
使用接口注解,当我们在mybatis配置文件配置映射的时候,我们只需要将该接口的

全路径映射,不用配置文件

<mapper class="com.et.TL.Mybatis.lesson01.InterfaceNote.HelloWorld"/>



mybatis的动态参数:

当我们在写sql语句的时候,有些参数需要是动态的,这时候我们就需要使用到

动态参数传递

1.#{参数|下标(0开始)}

使用#的方式传参可以避免sql注入问题

2.${参数|下标(0开始)}

使用$的方法不能避免sql注入问题,他是直接字符串拼接

注意:使用动态传参在使用注解的时候需要指定一个@Param注解在参数

的前面比如:

	@Select(value="select * from (select t.*,rownum rn from employee t where t.employeename like #{ename} order by employeeid asc) where rn>=#{startIndex} and rn<=#{endIndex}")
	public List<Map<String,Object>> queryLeave(@Param(value="ename")String ename,@Param(value="startIndex")int startIndex,@Param(value="endIndex")int endIndex);

注意:使用mybatis在取数据库的数据时如果数据库中的一些列为空则取出来的是Undefined,如果需要将该值转换则需要在mybatis配置文件中配置如下:

 <!-- 
  	该配置是代表当我们在取到数据库里面的数据为空时,什么都没有
  	如果不配置,则取到的则是Undefined
   -->
  <settings>
  	<setting name="callSettersOnNulls" value="true"/>
  </settings>


mybatis输入sql日志:

导入架包log4j.jar或者使用maven:

	<!-- 
    	导入log4j日志
     -->
     <dependency>
	  <groupId>log4j</groupId>
	  <artifactId>log4j</artifactId>
	  <version>1.2.17</version>
	</dependency>
在根目录下创建log4j.properties文件文件内容为:

#debug代表打印日志
#
log4j.rootLogger=DEBUG, Console  
#Console  
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  
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG  
详细内容请参考:http://blog.csdn.net/neutron117/article/details/51836006