素材来源于B站黑马的视频:https://www.bilibili.com/video/BV1mE411X7yp?from=search&seid=3671223557816907230
需要用到的工具/软件:eclipse、Navicat、VMware、JDK1.8、mysql5.1.46-32位(虚拟主机上)、maven3.5.4
一、远程连接mysql数据库
1、将虚拟机(win7-32位)上的mysql数据库设定为允许远程连接状态
依次在dos窗口执行以下命令:
use mysql; select host from user where user='root'; flush privileges;
2、再用Navicat新建连接,输入数据库的账号密码即可使用远程的数据库
我通过这个可视化工具,创建了一个user表:
创建该表的步骤如下:
①新建查询-->输入创建表单的sql语句-->run;
CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `username` varchar(32) NOT NULL COMMENT '用户名称', `birthday` datetime default NULL COMMENT '生日', `sex` char(1) default NULL COMMENT '性别', `address` varchar(256) default NULL COMMENT '地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
②新建查询-->输入insert语句-->run;
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
进行到这里,简单的数据表就准备好了。接下来是需要在eclipse中完成的操作。
二、配置eclipse
1、新建一个maven工程(因为这个入门案例涉及到很多的jar包,用maven管理起来比较方便)
*maven也是需要配置环境变量才能使用的,配起来和jdk一样的步骤,故在此省略。
项目完整的目录长这样:
①maven本地仓库的默认地址在c盘,我将它更改到D盘下;
打开maven的安装目录-->conf文件夹-->setting文件,加上红框里的语句即可。
②maven的默认jdk版本是1.5,这里我将它更改为1.8
点击顶上的Windows菜单-->Preferences-->Java-->Installed JREs-->add-->再选择你想要的jdk版本即可。
若做完这一步,一刷新maven工程,这个地方显示的还是jdk1.5:
那还需要再进一步设置:
打开项目所在的目录-->settings文件夹-->找到图中的文件:
直接将里面的jdk版本改为1.8:
2、配置pom.xml
<!-- Maven项目的基本配置 --> <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.lulu.mabatis</groupId> <artifactId>day01_mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> <dependencies> <!-- mybatis框架的依赖,可直接从官网复制过来 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!-- 数据库的依赖,写虚拟机中mysql数据库的版本号 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!-- 输出日志的依赖,可写可不写 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <!-- 单元测试的依赖,可写可不写 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
有几个要注意的地方:
①写了的依赖都是要导入相应的jar包到maven项目里去的;
②mysql数据库不要过分追求最新的版本,最好首选那些能找到jar包的旧版本。
像我之前在虚拟机上安装的5.7.29没有对应的jar包(官网也下不到),而5.1.46就有(之前保存的)。
3、创建实体类User
package com.lulu.domin; import java.io.Serializable; import java.util.Date; public class User implements Serializable{ private static final long serialVersionUID = 1L; private Integer id; private String username; private Date birthday; private String sex; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address=" + address + "]"; } }
4、创建Dao接口并声明一个方法findAll,为后续的输出做铺垫
package com.lulu.dao; import java.util.List; import com.lulu.domin.User; public interface IUserDao { List<User>findAll(); }
5、配置SqlMapConfig.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"> <!-- mybatis的主配置文件 --> <configuration> <!-- 配置环境 --> <environments default="mysql"> <!-- 配置mysql的环境 --> <environment id="mysql"> <!-- 配置事务的类型 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源(连接池) --> <dataSource type="POOLED"> <!-- 配置连接数据库的4个基本信息 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.1.103:3306/eesy"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --> <mappers> <mapper resource="com\\lulu\\dao\\IUserDao.xml"/> </mappers> </configuration>
6、配置IUserDao.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.lulu.dao.IUserDao"> <!-- 配置查询所有 --> <select id="findAll" resultType="com.lulu.domin.User"> select * from user </select> </mapper>
7、加入日志配置文件log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal log4j.rootCategory=debug, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=d:\axis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
至此,所有的配置全部完成,只待测试一下是否能正常运行了。
三、测试类
package com.lulu.test; import java.io.IOException; import java.io.InputStream; 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.lulu.dao.IUserDao; import com.lulu.domin.User; /* * Mybatis入门案例的测试类。 */ public class MybatisTest { public static void main(String[] args) throws IOException { //1.读取配置文件 InputStream in=Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); SqlSessionFactory factory=builder.build(in); //3.使用工厂生产SqlSession对象 SqlSession session=factory.openSession(); //4.使用SqlSession创建Dao接口的代理对象 IUserDao userDao=session.getMapper(IUserDao.class); //5.使用代理对象执行方法 List<User>users=userDao.findAll(); for(User user:users){ System.out.println(user); } //6.释放资源 session.close(); in.close(); } }
四、结果
如果你按照上面的步骤来,并且在没有任何错误的前提下,得到的输出信息应该是这样的:
2020-04-30 18:46:56,345 0 [ main] DEBUG ache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter. 2020-04-30 18:46:56,520 175 [ main] DEBUG source.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections. 2020-04-30 18:46:56,521 176 [ main] DEBUG source.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections. 2020-04-30 18:46:56,521 176 [ main] DEBUG source.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections. 2020-04-30 18:46:56,521 176 [ main] DEBUG source.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections. 2020-04-30 18:46:56,784 439 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection 2020-04-30 18:47:00,528 4183 [ main] DEBUG source.pooled.PooledDataSource - Created connection 20025028. 2020-04-30 18:47:00,528 4183 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1318ec4] 2020-04-30 18:47:00,542 4197 [ main] DEBUG com.lulu.dao.IUserDao.findAll - ==> Preparing: select * from user 2020-04-30 18:47:00,592 4247 [ main] DEBUG com.lulu.dao.IUserDao.findAll - ==> Parameters: 2020-04-30 18:47:00,620 4275 [ main] DEBUG com.lulu.dao.IUserDao.findAll - <== Total: 6 User [id=41, username=老王, birthday=Tue Feb 27 17:47:08 CST 2018, sex=男, address=北京] User [id=42, username=小二王, birthday=Fri Mar 02 15:09:37 CST 2018, sex=女, address=北京金燕龙] User [id=43, username=小二王, birthday=Sun Mar 04 11:34:34 CST 2018, sex=女, address=北京金燕龙] User [id=45, username=传智播客, birthday=Sun Mar 04 12:04:06 CST 2018, sex=男, address=北京金燕龙] User [id=46, username=老王, birthday=Wed Mar 07 17:37:26 CST 2018, sex=男, address=北京] User [id=48, username=小马宝莉, birthday=Thu Mar 08 11:44:00 CST 2018, sex=女, address=北京修正] 2020-04-30 18:47:00,648 4303 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1318ec4] 2020-04-30 18:47:00,649 4304 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1318ec4] 2020-04-30 18:47:00,649 4304 [ main] DEBUG source.pooled.PooledDataSource - Returned connection 20025028 to pool.
去掉日志,输出的信息与表单内容一致。
五、过程中有可能碰到的问题及解决方案
问题1:Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result. 解决方案: https://www.cnblogs.com/summer-solstice-sea/archive/2016/06/05/5562351.html(对我无效) https://www.cnblogs.com/lmei/p/7107421.html(有效) 问题2:Invalid bound statement (not found): com.xxx.dao.xxxDao.selectByxx 解决方案: https://blog.csdn.net/weixin_42204641/article/details/81155726?utm_source=blogxgwz0 问题3:A mapper element may only specify a url, resource or class, but not more than one. 解决方案: https://blog.csdn.net/weixin_45535861/article/details/104016685
六、总结
Java学习真的是一个圈,前几天因为学框架之前先学了maven就自认为是浪费了时间。
没想到开始学框架了,又要求你至少会一点maven的知识。
直接从se跳到框架学习,还是会有一种手足无措的感觉。一边学一边补ee的知识点吧。