本文基于下述教程编写:【B站】ssm教程
新手IDEA创建Maven项目问题
关于P5的添加mybatis
依赖一直爆红的原因,修改pom.xml
后你都要到主界面最竖着写的右侧找到Maven
,点击打开——刷新,IDEA才能下载依赖包。或者直接点击代码界面突然冒出来的悬浮按钮Load Maven Changes
。
但是我遇到一个问题,完全按照老师的操作,也是卡在Resolving dependencies of XXX......
没法结束进度条。至于为什么会出现这种情况?希望有大佬能解答一下鄙人疑惑。(猜测墙子太厚,没办法下载到默认的maven库 http://my.repository.com/repo/path
)
没办法就只能更改创建项目的方法了,用骨架构建项目,换成指定Create from archetype
选择maven- archetype-webapp
,然后选择一个自定义安装的Maven
库,在settings.xml
设置阿里云国内镜像,完美解决问题!
借用前辈的帖子用下:Maven安装和配置
遇到两个坑:
一、Maven库项目的环境变量配置那步,一定要用M2_HOME
,试了MAVEN_HOM
E无法识别到。
二、出现一个Warnning:No archetype found in remote catalog. Defaulting to internal catalog.
这就很难受了,不要出现问题再解决,原因是很多教程里面都缺失了这么一块,紧紧跟着上述链接指引是没问题的:
MyBatis
不仅能够通过类xml资源
代理实现Dao实现类,还能够通过注解方式
实现Dao实现类,同时也支持手动实现Dao实现类。
类xml资源代理实现Dao时:
需要:主配置文件<mappers> -<mapper resource>方式指定资源
+Dao实现类的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">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssmtest"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,resource指定映射文件指的是每个dao独立的配置文件-->
<!--注解方式,class属性指定类名-->
<mappers>
<mapper resource="com/ssmTest/dao/IUserDao.xml"/>
<!--<mapper class="com.ssmTest.dao.IUserDao"/>-->
</mappers>
</configuration>
Dao的配置文件:
<?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.ssmTest.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.ssmTest.domain.User">
select * from user
</select>
</mapper>
注解方式实现Dao时:
需要:主配置文件<mappers> -<mapper class>方式指定资源
+【删除Dao实现类的xml配置文件,不然报错】+在Dao中添加注解
public interface IUserDao {
//查询所有操作
//注解方式
//@Select("select * from user")
List<User> findAll();
}
注意实现类xml与注解方式在主配置文件Mappers
路径指定的区别,resource
用/划分路径,class
用.划分包名。
手动实现Dao时:
需要:手写Dao实现类
+Dao实现类的xml配置文件
(在实现类文件中指定方法:Session调用selectList())
public class UserDaoImpl implements IUserDao {
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
@Override
public List<User> findAll() {
//1.使用工厂创建SqlSession对象
SqlSession session=factory.openSession();
//2.使用session执行查询所有方法
List<User> users=session.selectList("com.ssmTest.dao.IUserDao.findAll");
session.close();
return users;
}
}
测试类:
public class MybatisTest {
public static void main(String[] args) throws Exception {
//1.读取配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
//MyBtis实现处理层Impl方式
//UserDaoImpl userDao=new UserDaoImpl(factory);
//3.使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao=sqlSession.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users=userDao.findAll();
for(User user:users){
System.out.println(user);
}
//6.释放资源
//sqlSession.close();
in.close();
}
}
使用传统的手写Dao的方法,直接跳过3、4步即可实现。