mybatis入门HelloWorld程序
程序员文章站
2022-05-29 20:05:32
...
注意我这里使用的是maven项目:
第一步加入架包:
第二步配置mybatis配置文件,在src下面建立文件mybatis.xml文件:
第三步建立一个Java文件,和一个mybatis的映射文件:
第四步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