MyBatis学习-偏实践(单独MyBatis项目)
准备先把MyBatis搞熟悉了,然后把SpringMVC搞熟悉了。
MyBatis的材料,除了我之前自己实验的
http://www.cnblogs.com/charlesblc/p/5906431.html
还有这个:
http://www.cnblogs.com/charlesblc/p/5939505.html
现在主要参考以下两个:
http://www.cnblogs.com/charlesblc/p/5906431.html (转载自 http://www.yihaomen.com/article/java/302.htm)
http://limingnihao.iteye.com/blog/781671
可能还有这个: http://www.cnblogs.com/xdp-gacl/p/4261895.html
利用Idea重新开始搭建:
按照这个页面:http://www.yihaomen.com/article/java/303.htm 写了一些代码。(整理好的版本在后面给出)
运行, 开始没有找到配置文件:
java.io.IOException: Could not find resource /Users/baidu/Documents/Data/Work/Code/Self/mybatis-demo/target/classes/resources/Mybatis.xml
本来以为需要配置才能把Resources里面的文件放到编译目标目录。上网查之后发现是自动放的。后来发现文件貌似是在:
/Users/baidu/Documents/Data/Work/Code/Self/mybatis-demo/target/classes
然后用了
String configFile = Class.class.getClass().getResource("/").getPath().toString() + "Mybatis.xml"; reader = Resources.getResourceAsReader(configFile);
还是报错找不到,但是报错信息中的文件,是实际存在的。
怀疑是不是不能用绝对路径,所以改了一下:
reader = Resources.getResourceAsReader("Mybatis.xml");
发现可以了。哈哈。
整理代码结构如下,其中红框内的是实际用到的文件:
在开发之前,在数据库中建立一个表。注意其中语句\G表示Gracefully显示,垂直显示。另外,如果结果出现乱码,查看之前Mysql修正乱码的帖子。
mysql> use springdemo; Database changed mysql> show create table user \G *************************** 1. row *************************** Table: user Create Table: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nickname` varchar(45) DEFAULT NULL, `password` varchar(45) DEFAULT NULL, `first_name` varchar(45) DEFAULT NULL, `last_name` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> select * from user; +----+------------+----------+------------+-----------+ | id | nickname | password | first_name | last_name | +----+------------+----------+------------+-----------+ | 1 | chaoliu | 321 | chao | liu | | 3 | micro | 123 | bill | gates | | 5 | helloworld | 123 | hello | world | | 7 | 你好 | 123 | 中 | 文 | +----+------------+----------+------------+-----------+ 4 rows in set (0.00 sec)
然后看工程里面各个文件:
pom.xml
<?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.myapp</groupId> <artifactId>mybatis-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <!-- mybatis版本号 --> <mybatis.version>3.2.8</mybatis.version> <!-- mysql驱动版本号 --> <mysql-driver.version>5.1.29</mysql-driver.version> <!-- log4j日志包版本号 --> <slf4j.version>1.7.18</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- 添加mysql驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-driver.version}</version> </dependency> <!-- 添加日志相关jar包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> </dependencies> </project>
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>
<typeAliases>
<typeAlias alias="User" type="com.myapp.mybatis.model.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://[host]:8306/springdemo" />
<property name="username" value="root"/>
<property name="password" value="[password]"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="User.xml"/>
</mappers>
</configuration>
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.myapp.mybatis.models.UserMapper"> <select id="selectUserByID" parameterType="int" resultType="User"> select * from `user` where id = #{id} </select> </mapper>
User.java
package com.myapp.mybatis.model; /** * Created by baidu on 16/10/18. */ public class User { private int id; private String nickname; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNickName() { return nickname; } public void setUserName(String nickName) { this.nickname = nickName; } }
Test.java
package com.myapp.mybatis.test; import com.myapp.mybatis.model.User; 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 org.apache.log4j.lf5.util.Resource; import java.io.Reader; /** * Created by baidu on 16/10/18. */ public class Test { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { //String configFile = Class.class.getClass().getResource("/").getPath().toString() + "Mybatis.xml"; reader = Resources.getResourceAsReader("Mybatis.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.myapp.mybatis.models.UserMapper.selectUserByID", 1); System.out.printf("Get user id: %d, nickname: %s\n", user.getId(), user.getNickName()); } finally { session.close(); } } }
然后运行,用基本的java环境运行即可。运行结果如下:
/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java -Didea.launcher.port=7532 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/tools.jar:/Users/baidu/Documents/Data/Work/Code/Self/mybatis-demo/target/classes:/Users/baidu/.m2/repository/org/mybatis/mybatis/3.2.8/mybatis-3.2.8.jar:/Users/baidu/.m2/repository/mysql/mysql-connector-java/5.1.29/mysql-connector-java-5.1.29.jar:/Users/baidu/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/Users/baidu/.m2/repository/org/slf4j/slf4j-api/1.7.18/slf4j-api-1.7.18.jar:/Users/baidu/.m2/repository/org/slf4j/slf4j-log4j12/1.7.18/slf4j-log4j12-1.7.18.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain com.myapp.mybatis.test.Test log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Get user id: 3, nickname: micro Process finished with exit code 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!