首页 > 代码库 > mybatis spring maven

mybatis spring maven

maven版本:3.3.9  解压即可使用

spring版本:4.3.9  通过maven进行管理下载

mybatis版本:3.4.4 通过maven进行管理下载

mysql版本:5.7  connector也是通过maven进行下载

首先,使用maven一定要网速好一点,不然在线下载jar包会很慢,其次,关于仓库的问题,最好换成国内的阿里云的仓库,下载会更快。

具体为,修改maven的E:\Runtime\apache-maven-3.3.9\conf下的settings.xml文件:

在 <mirrors>标签内添加:

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>

   <mirror>
    <id>CN</id>
    <name>OSChina Central</name>
    <url>http://maven.oschina.net/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>

然后再eclipse中直接在线安装maven的插件,然后我们新建一个maven工程,选择:

技术分享

以创建一个web工程。

然后在,pom.xml中填入:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.audi</groupId>
    <artifactId>testMavenSpring</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>testMavenSpring Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.9.RELEASE</version>
            <!-- <scope>runtime</scope> -->
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.9.RELEASE</version>
            <!-- <scope>runtime</scope> -->
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>testMavenSpring</finalName>
        <plugins>
            <!-- define the project compile level -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

保存以后,maven会自动开始下载jar包。

这里遇到了一个问题:

技术分享

全部的错误信息是:

Description    Resource    Path    Location    Type
Failure to transfer org.codehaus.plexus:plexus:pom:1.0.12 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.codehaus.plexus:plexus:pom:1.0.12 from/to central (https://repo.maven.apache.org/maven2): The operation was cancelled.    pom.xml    /testMavenSpring    line 1    Maven Configuration Problem

解决方法如下:

在maven的本地仓库中,比如我的路径是C:\Users\Mike\.m2\repository下搜索last,

技术分享

把这些文件全部删除了,然后在eclipse中,项目右键——》maven更新一下项目,上述错误就解决了。

技术分享

 

 

如果需要将web module改成3.0版本的话,直接在项目右键——》properties——》project facets更改的话,可能会报错。

技术分享

报错信息如下:

Cannot change version of project facet Dynamic Web Module to 3.0

这个时候你需要更改下图中选中的两个文件(两个文件都存在于当前工程路径下):

技术分享

将java的版本改为1.6以上,将  <installed facet="jst.web" version="2.3"/>改为3.0

同时,修改工程目录下的web.xml,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="schedule-console" version="3.0">
</web-app>

这个时候,项目右键——》properties——》project facets中的dynamic web module应该自动变成3.0了,如果没变就重启一下eclipse就可以了。

 

mysql的自动增长AUTO_INCREMENT,在我们使用delete from table_name语句删除了表中全部的数据以后,下一次在插入一条数据,那么自增长依然会按照删除之前自增长的值来增长,并不会回到默认值(并且,这个和使用哪种存储引擎是没有关系的),解决的办法就是直接使用truncate table table_name,这样删除数据自增长字段就可以回到初始的值了。

 

关于存储引擎的一片文章,http://www.cnblogs.com/gbyukg/archive/2011/11/09/2242271.html,写的很好。

 

下面开始连接mysql

参考文章:http://blog.csdn.net/techbirds_bao/article/details/9233599/

使用mysql作为数据库,新建一个数据库名为mybatis,下面是建表语句:

#mysql注释需要注意一点 在sql文件中最好使用#来进行注释,因为使用-- 来注释需要在它后面加上一个空格  否则运行sql文件会报错
#创建表
Create TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userName` varchar(50) DEFAULT NULL,
  `userAge` int(11) DEFAULT NULL,
  `userAddress` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
#MySQL5.5以后默认使用InnoDB存储引擎,提供事务安全表,其它存储引擎都是非事务安全表。
ALTER TABLE `user` COMMENT 测试用户表;
ALTER TABLE `user` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 用户id;
ALTER TABLE `user` MODIFY `userName` varchar(50) COMMENT 用户;

eclipse中项目需要做的一些配置如下:

首先是一个映射文件User.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.audi.mybatis.UserMapper">
    <select id="selectUserByID" parameterType="int" resultType="User">
        select * from user where id = #{id}
    </select>
    
    <select id="selectUserAll" resultType="User">
        select * from user
    </select>
</mapper>

然后是连接数据库需要做的一些配置Configuration.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>
    <typeAliases> 
        <typeAlias alias="User" type="com.audi.mybatis.dto.User"/> 
    </typeAliases> 

    <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://127.0.0.1:3306/mybatis?serverTimezone=UTC" />
            <property name="username" value="root"/>
            <property name="password" value="yourcode"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="mapper/User.xml"/>
    </mappers>
</configuration>

简历数据库持久化对象DTO:

package com.audi.mybatis.dto;

public class User
{
    private int id;
    private String userName;
    private String userAge;
    private String userAddress;

    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String userName)
    {
        this.userName = userName;
    }

    public String getUserAge()
    {
        return userAge;
    }

    public void setUserAge(String userAge)
    {
        this.userAge = userAge;
    }

    public String getUserAddress()
    {
        return userAddress;
    }

    public void setUserAddress(String userAddress)
    {
        this.userAddress = userAddress;
    }

    @Override
    public String toString()
    {
        return "User [id=" + id + ", userName=" + userName + ", userAge=" + userAge + ", userAddress=" + userAddress
                + "]";
    }

}

下面是测试类,直接以java程序运行:

package com.audi.test;

import java.io.Reader;
import java.util.Iterator;
import java.util.List;

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 com.audi.mybatis.dto.User;


public class TestMybatis
{
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static
    {
        try
        {
            reader = Resources.getResourceAsReader("config/Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSession()
    {
        return sqlSessionFactory;
    }

    public static void main(String[] args)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try
        {
            User user = (User) session.selectOne("com.audi.mybatis.UserMapper.selectUserByID", 3);
            System.out.println(user.getUserAddress());
            System.out.println(user.getUserName());
            List<User> list = session.selectList("com.audi.mybatis.UserMapper.selectUserAll");
            Iterator<User> iterator= list.iterator();
            while (iterator.hasNext())
            {
                System.out.println(iterator.next());
            }
        } finally
        {
            session.close();
        }
    }
}

现在运行程序应该就可以获得数据库保存的结果了,注意上面的语句可能会抛出空指针异常,这事因为数据库里没有数据,查询不到id为1的用户数据。

接下来我们来进行spring集成,使用spring来管理一些bean,比如DataSource。以接口变成方式来访问数据库。

先看一下整个工程的目录结构图:

技术分享

spring的一个配置文件applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!--本示例采用DBCP连接池,应预先把DBCP的jar包复制到工程的lib目录下。 -->

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
        <property name="url"
            value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=UTC" />
        <property name="username" value="root" />
        <property name="password" value="yourcode" />
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--dataSource属性指定要用到的连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!--configLocation属性指定mybatis的核心配置文件 -->
        <property name="configLocation" value="config/Configuration.xml" />
    </bean>

    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例 -->
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
        <!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象 -->
        <property name="mapperInterface" value="com.audi.mybatis.dao.IUserOperation" />
    </bean>

</beans>

Configuration.xml,注意其中关于数据源都注释了,这部分交给spring来管理了:

<?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>
    <typeAliases> 
        <typeAlias alias="User" type="com.audi.mybatis.dto.User"/> 
    </typeAliases> 

    <!-- <environments default="development">
        <environment id="development">
        <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            <property name="driver" value="http://www.mamicode.com/com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="http://www.mamicode.com/jdbc:mysql://127.0.0.1:3306/mybatis?serverTimezone=UTC" />
            <property name="username" value="http://www.mamicode.com/root"/>
            <property name="password" value="http://www.mamicode.com/w513723"/>
            </dataSource>
        </environment>
    </environments> -->
    
    <mappers>
        <mapper resource="mapper/User.xml"/>
    </mappers>
</configuration>

映射文件User.xml:(注意其中的namespace和上面的user.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.audi.mybatis.dao.IUserOperation">
    <select id="selectUserByID" parameterType="int" resultType="User">
        select * from user where id = #{id}
    </select>
    
    <select id="selectUserAll" resultType="User">
        select * from user
    </select>
</mapper>

接口超级简单:IUserOperation.java

package com.audi.mybatis.dao;

import com.audi.mybatis.dto.User;

public interface IUserOperation
{
    public User selectUserByID(int id);
}

下面是测试代码:

package com.audi.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.audi.mybatis.dao.IUserOperation;
import com.audi.mybatis.dto.User;
public class MybatisSprintTest
{

    private static ApplicationContext ctx;

    static
    {
        // 使用ClassPathXmlApplicationContext来加载spring的配置文件
        ctx = new ClassPathXmlApplicationContext("config/applicationContext.xml");
    }

    public static void main(String[] args)
    {
        IUserOperation mapper = (IUserOperation) ctx.getBean("userMapper");
        // 测试id=1的用户查询,根据数据库中的情况,可以改成你自己的.
        System.out.println("得到用户id=3的用户信息");
        User user = mapper.selectUserByID(3);
        System.out.println(user);
    }

}

测试结果:

技术分享

个人觉得这种面向接口的变成方式其实不好,因为映射文件会和接口形成强关联的关系,并且接口不写实现类就直接调用,总感觉怪怪的。

mybatis spring maven