首页 > 代码库 > 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&characterEncoding=utf8&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