发表于: 2017-10-31 22:45:44
1 721
day11
今日完成
根据网上教程,完成mybatis连接数据库,进行了一次简单的查询工作
创建users表
项目结构如图
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>
<!-- 引用jdbc.properties配置文件 -->
<properties resource="jdbc.properties"/>
<!--typeAliases>
<typeAlias alias="UserAlias" type="org.apache.ibatis.submitted.complex_property.User"/>
</typeAliases-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 注册userMapper.xml文件, userMapper.xml位于com.mybatis.mapping这个包下,
所以resource写成com/mybatis/mapping/userMapper.xml-->
<mappers>
<mapper resource="com/mybatis/mapping/userMapper.xml"/>
</mappers>
</configuration>
定义表所对应的实体类Userz如下
package com.mybatis.domin;
public class User {
private int id;
private String name;
private int age;
public int getId()
{
return id;
}
public void setId(){
this.id=id;
}
public String getName(){
return name;
}
public void setName(){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(){
this.age=age;
}
public String toString(){
return "User ---[id="+id+",name="+name+",age="+age+"]---";
}
}
定义操作users表的sql映射文件userMapper.xml
创建一个com.mybatis.mapping包,专门用于存放sql映射文件,在包中创建一个userMapper.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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="com.mybatis.mapping.userMapper"就是com.mybatis.mapping(包名)+userMapper(userMapper.xml文件去除后缀)-->
<mapper namespace="com.mybatis.mapping.userMapper">
<select id="getUser" parameterType="int"
resultType="com.mybatis.domin.User">
select * from users where id=#{id}
</select>
</mapper>
在mybatis-config.xml文件中注册userMapper.xml文件
<!-- 注册userMapper.xml文件, userMapper.xml位于com.mybatis.mapping这个包下,
所以resource写成com/mybatis/mapping/userMapper.xml-->
<mappers>
<mapper resource="com/mybatis/mapping/userMapper.xml"/>
</mappers>
测试代码
import com.mybatis.domin.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class Test1 {
public static void main(String[] args) throws IOException{
//mybatisde 配置文件
String resource="mybatis-config.xml";
//使用类加载器加载mybatis的配置文件
InputStream is=Test1.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//创建能执行映射文件中sql的sqlSession
SqlSession session=sessionFactory.openSession();
/*
* 映射sql的标识字符串,
* com.mybatis.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
* getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
//映射 sql的标识字符串
String statement="com.mybatis.mapping.userMapper.getUser";
User user=session.selectOne(statement,2);
System.out.println(user);
}
}
结果如下
遇到的难题
最开始运行时 出现异常
上网搜索解决方案、
1,原因:IDEA是不会编译src的java目录的xml文件,所以在Mybatis的配置文件中找不到xml文件!(也有可能是Maven构建项目的问题,网上教程很多项目是普通的Java web项目,所以可以放到src下面也能读取到)
方法:不将xml放到src目录下面,将xxxMapper.xml放到Maven构建的resource目录下面!
2,
在Maven的pom文件中,添加下面代码:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
如图
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jnshu</groupId>
<artifactId>mybatisDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<denpendency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</denpendency>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
还有个问题就是,经常在pom.xml文件配置时会出现红色波浪线,但是好像也能成功运行项目。。。
明日计划
继续学习mybatis
收获
对mybatis的各个配置文件有了个初步认识,但是测试代码中就有很多没见过的Java方法,还需要去了解。
MyBatis核心
MyBatis的xml配置文件包含了设置和影响MyBatis行为的属性,XML配置文件的层次结构如下:
Configuration
Properties属性
Settings设置
typeAliases类型别名
typeHandlers类型处理器
ObjectFactory对象工厂
Plugins插件
Environments环境
Environment环境变量
transactionManager事物管理器
datasource数据源
mappers映射器
基本配置项:
<?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>
…其他配置项
</configuration>
注意:
MyBatis 将按照下面的顺序来加载属性:
在 properties素体内定义的属性首先被读取。
然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。
最后读取parameterType传递的属性,它会覆盖已读取的同名属性
评论