Mybatis配置方式:
方式一:不用接口:表对应类+.xml
方式二:用mapper:表对应类+类Mapper接口+.xml
方式三:使用注解:表对应类+类Mapper接口
当然还有SQL语句方式,在另一篇文章
https://blog.youkuaiyun.com/beauman/article/details/90751393
~~
开始
~~
用最简单的只有 id 和name的表演示
对应World类
public class World {
int id;
String name;
@Override
public String toString() {
return "World{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
方式一:
不用mapper 只用表对应World类+World.xml
因为我的类创建再pojo文件下,我为了好看在resources下创建了一个pojo而真正决定起作用的和路径无关,只要在mybatis下
world.xml直接放在resources也可以
1.world.xml代码:
只演示一个select
<?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="M2.pojo">
<select id="listWorld" resultType="World">
select * from world
</select>
</mapper>
2.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>
<!-- 使用LOG4J-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--别名-->
<typeAliases>
<package name="M2.pojo"/>
</typeAliases>
<!-- environmengs
transactionMapper
dataSource
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/how2java?useSSL=false
&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="pojo/World.xml"/>
</mappers>
</configuration>
3.Test
public class WorldTest {
@Test
public void worldt() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
CategoryMapper mapper = session.getMapper(CategoryMapper.class);
List<World> worlds = session.selectList("listWorld");
for (World w:worlds
) {
System.out.println(w);
}
session.commit();
session.close();
}
}
方式二:
使用mapper接口方式 那么需要World类+WorldMapper接口+WorldMapper.xml
1.worldMapper
public interface WorldMapper {
void addWorld();
List<World> listWorld();
}
2.WorldMapper.xml
注意点:
1.还是那句话,名字和位置是随便起,随便放,但是 你得在 mybatis.xml中对应准确:
<mappers>
<mapper resource="mapper/World.xml"/>
</mappers>
2.此时的namespace的值必须为WorldMapper接口
代码:
<?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="M1.mapper.WorldMapper">
<select id="listWorld" resultType="World">
select * from world
</select>
</mapper>
3.Mybatis.xml
只需要改
<mappers>
<mapper resource="mapper/World.xml"/>
</mappers>
全部代码:
<?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>
<!-- 使用LOG4J-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--别名-->
<typeAliases>
<package name="M2.pojo"/>
</typeAliases>
<!-- environmengs
transactionMapper
dataSource
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/how2java?useSSL=false
&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/World.xml"/>
</mappers>
</configuration>
4.Test
public class WorldTest {
@org.junit.Test
public void test1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//读取配置文件的配置信息,利用SqlSessionFactoryBuilder创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//利用sqlSessionFactory打开与数据库的会话
SqlSession sqlSession = sqlSessionFactory.openSession();
WorldMapper worldMapper = sqlSession.getMapper(WorldMapper.class);
List<World> lists = worldMapper.listWorld();
for (World w : lists
) {
System.out.println(w);
}
sqlSession.commit();
sqlSession.close();
}
方式三
使用注解 只有World类 + WorldMapper(注解)
1.WorldMapper2
public interface WorldMapper2 {
@Select("select * from world")
List<World> listWorld2();
}
2.mybatis.xml配置
只修改下面就行了
<mappers>
<mapper class="M1.mapper.WorldMapper2"/>
</mappers>
3.Test
public class WorldMapperTest {
@Test
public void t() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//读取配置文件的配置信息,利用SqlSessionFactoryBuilder创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//利用sqlSessionFactory打开与数据库的会话
SqlSession sqlSession = sqlSessionFactory.openSession();
WorldMapper2 mapper2 = sqlSession.getMapper(WorldMapper2.class);
listWorld(mapper2);
sqlSession.close();
}
private static void listWorld(WorldMapper2 mapper2){
List<World> ws = mapper2.listWorld2();
for (World w:ws
) {
System.out.println(w);
}
}
}
总结:
1.用session启动和用mapper启动
方式一的启动方式是session.
方式三的启动方式是
先getMapper
WorldMapper mapper = sqlSession.getMapper(WorldMapper.class);
再调用mapper.
在WorldMapper中自己设置的方法。
方式二因为既有mapper又有xml所以
session和mapper都可以启动,
上面代码给的是mapper启动,这是session启动,效果一样,看你想用哪个
SqlSession sqlSession = sqlSessionFactory.openSession();
List<World> worlds = sqlSession.selectList("listWorld");
for (World w:worlds
) {
System.out.println(w);
}
2.在mybatis.xml中的配置不同
方式一、二是xml配置方式
在mybatis.xm需要用
<mappers>
<mapper resource=" / .xml"/>
</mapper>
而方式三不用xml只保留了mapper
<mappers>
<mapper class=" . .xml"/>
</mapper>
3.namespace中的指定
方式二中xml的
<mapper namespace="M2.mapper.WorldMapper">
必须指定到mapper