发表于: 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指定一个唯一的namespacenamespace的值习惯上设置成包名+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);
       //创建能执行映射文件中sqlsqlSession
       SqlSession session=sessionFactory.openSession();
       /*
        * 映射sql的标识字符串,
        * com.mybatis.mapping.userMapperuserMapper.xml文件中mapper标签的namespace属性的值,
        * getUserselect标签的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传递的属性,它会覆盖已读取的同名属性



返回列表 返回列表
评论

    分享到